Diskon 50% terbatas! Masukkan kupon "programmer2025" di kelas apa saja

Tanggal terakhir pada bulan Februari tidak dapat ditampilkan

Saya memiliki parameter yang berbentuk tanggal untuk menampilkan tanggal mundur pada bulan sebelumnya, berikut penjelasannya.

param = 31 Maret 2025 Kemudian berdasarkan param tersebut saya mundurkan 1 bulan (tanggal terakhir pada bulan sebelumnya, yaitu : 28 Februari 2025). Adapun potongan baris perintahnya sebagai berikut : Alert::success('Testing', Carbon\Carbon::parse('2025-03-31')->subMonth()->endOfMonth()->formatLocalized('%Y-%m-%d'));

Kendalanya tanggal yang muncul adalah tanggal param, harusnya 2025-02-28.

Pada percobaan lainnya, misalnya :

  1. 31 Januari 2025 maka akan tampil 31 Desember 2024
  2. 28 Februari 2025 maka akan tampil 31 Januari 2025.

saya sudah mencoba pada bulan lainnya, yaitu : April sd Desember 2025. jawabannya tetap benar, yaitu : mundur 1 bulan dari parameter yang kita masukkan dan kesalahannya hanya ketika dimundurkan ke bulan februari.

Mohon bantuannya kepada teman-teman barangkali ada pernah ketemu permasalahan ini, terima kasih.

avatar jungulo
@jungulo

25 Kontribusi 2 Poin

Diperbarui 10 bulan yang lalu

Tanggapan

SOLVED

sedikit saya modifikasi pada baris perintah carbonnya : dari : Carbon\Carbon::parse('2025-03-31')->subMonth()->endOfMonth()->formatLocalized('%Y-%m-%d');

diubah menjadi : Carbon::parse($getperiode)->subMonthNoOverflow()->endOfMonth()->rawFormat('Y-m-d');

terima kasih, silahkan dituliskan jawabannya di area jawaban, lalu ditandai sebagai jawaban yang benar.

2 Jawaban:

Bisa dijelaskan maksudnya "Kendalanya tanggal yang muncul adalah tanggal param, harusnya 2025-02-28." Maksudnya tanggal param di sini?

Mungkin perhitungannya adalah tanggal akhir dari bulan Februari, yaitu 28 Februari.

avatar hilmanski
@hilmanski

2715 Kontribusi 2152 Poin

Dipost 1 tahun yang lalu

Tanggapan

maksudnya adalah ketika inputan kita adalah 2025-03-31 harusnya ketika dimundurkan menggunakan kode di atas adalah 2025-02-28, namun pada kasus ini itu tidak berjalan. Justru yang muncul sebagai hasil adalah 2025-03-31 (inputan itu sendiri).

Ketika diuji coba pada akhir bulan yang lain, misalnya :

  1. 31 Januari 2025 maka akan tampil 31 Desember 2024
  2. 28 Februari 2025 maka akan tampil 31 Januari 2025. disini berjalan dengan baik.

Saya berasumsi apakah karena pada bulan februari adalah tidak genap 30/31 hari?

Untuk mendapatkan tanggal terakhir bulan sebelumnya, kamu bisa langsung pakai:

Carbon::parse('2025-03-31')->subMonthNoOverflow()->endOfMonth();

Penjelasan:

subMonthNoOverflow() → beda dengan subMonth(), fungsi ini tidak akan lompat ke bulan berikutnya ketika tanggal tidak valid.

Jadi dia tetap akan mundur ke akhir bulan sebelumnya (28 Februari 2025).

avatar MuhAlifAnhar
@MuhAlifAnhar

5 Kontribusi 0 Poin

Dipost 10 bulan yang lalu

Tanggapan

Carbon::subMonth() bekerja seperti ini secara default:

“Kurangi satu bulan, tetap pada tanggal yang sama jika memungkinkan.”

Jadi saat kamu melakukan:

Carbon::parse('2025-03-31')->subMonth()

Carbon mencoba membuat tanggal:

“2025-02-31” ...tapi karena tanggal 31 Februari tidak ada, Carbon akan menyesuaikan otomatis ke tanggal terakhir bulan berikutnya → yaitu 2025-03-02 (bukan Februari).

Maka ketika kamu tambahkan ->endOfMonth(), dia ambil lagi end of March (bukan Februari). Hasil akhirnya: tetap 2025-03-31 HAHAAHH

Login untuk ikut Jawaban