Bagaimana saya bisa mendapatkan hari terakhir bulan ini di PHP?
Diberikan:
$a_date = "2009-11-23"
Saya ingin 2009-11-30; dan diberikan
$a_date = "2009-12-23"
Saya ingin 2009-12-31.
Bagaimana saya bisa mendapatkan hari terakhir bulan ini di PHP?
Diberikan:
$a_date = "2009-11-23"
Saya ingin 2009-11-30; dan diberikan
$a_date = "2009-12-23"
Saya ingin 2009-12-31.
Jawaban:
t
mengembalikan jumlah hari pada bulan tanggal tertentu (lihat dokumen untukdate
):
$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));
DateTime
Anda dapat melakukan sesuatu seperti ini:(new DateTime('2009-11-23'))->modify('last day of')
Kode yang menggunakan strtotime () akan gagal setelah tahun 2038. (seperti yang diberikan pada jawaban pertama di utas ini) Sebagai contoh coba gunakan yang berikut ini:
$a_date = "2040-11-23";
echo date("Y-m-t", strtotime($a_date));
Ini akan memberikan jawaban sebagai: 1970-01-31
Jadi alih-alih strtotime, fungsi DateTime harus digunakan. Kode berikut akan berfungsi tanpa masalah Tahun 2038:
$d = new DateTime( '2040-11-23' );
echo $d->format( 'Y-m-t' );
strtotime
kode memberi saya hasil ini: 2040-11-30
Saya tahu ini sedikit terlambat tetapi saya pikir ada cara yang lebih elegan untuk melakukan ini dengan PHP 5.3+
menggunakan DateTime kelas :
$date = new DateTime('now');
$date->modify('last day of this month');
echo $date->format('Y-m-d');
$date = DateTime::createFromFormat('m/d/Y', '1/10/2014');
Ada juga fungsi built in PHP cal_days_in_month () ?
"Fungsi ini akan mengembalikan jumlah hari di bulan tahun untuk kalender yang ditentukan." http://php.net/manual/en/function.cal-days-in-month .
echo cal_days_in_month(CAL_GREGORIAN, 11, 2009);
// = 30
Ini seharusnya bekerja:
$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());
$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());
$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());
echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';
echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';
echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';
Apa yang salah - Yang paling elegan untuk saya gunakan DateTime
Saya heran saya tidak melihat DateTime::createFromFormat
, satu kalimat
$lastDay = \DateTime::createFromFormat("Y-m-d", "2009-11-23")->format("Y-m-t");
Anda bisa membuat tanggal untuk yang pertama bulan berikutnya, dan kemudian gunakan strtotime("-1 day", $firstOfNextMonth)
mktime(0, 0, 0, $month+1, 0, $year);
strtotime()
dan mktime()
tidak dianjurkan. bug yang dikenal seperti penentuan tanggal di tepi bulan dan perhitungan tahun kabisat. Karena DateTime
tersedia, Anda harus menggunakan kelas ini untuk menghindari masalah di masa depan. Seperti yang dikatakan berkali-kali sebelum saya, kedua fungsi ini strtotime()
dan mktime()
akan gagal setelah 2038. Itu sebabnya saya menurunkan ...
Coba ini, jika Anda menggunakan PHP 5.3+,
$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');
Untuk menemukan bulan depan tanggal terakhir, ubah sebagai berikut,
$date->modify('last day of 1 month');
echo $date->format('Y-m-d');
dan seterusnya..
Solusi Anda ada di sini ..
$lastday = date('t',strtotime('today'));
31
untuk September
yang seperti yang Anda tahu itu tidak benar.
Anda dapat menemukan hari terakhir bulan ini beberapa cara. Tapi cukup Anda bisa melakukan ini menggunakan fungsi PHP strtotime () dan date (). Saya membayangkan kode akhir Anda akan terlihat seperti ini:
$a_date = "2009-11-23";
echo date('Y-m-t',strtotime($a_date));
Tetapi jika Anda menggunakan PHP> = 5.2 Saya sangat menyarankan Anda menggunakan objek DateTime yang baru. Contohnya seperti di bawah ini:
$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');
Anda juga dapat menyelesaikan ini menggunakan fungsi Anda sendiri seperti di bawah ini:
/**
* Last date of a month of a year
*
* @param[in] $date - Integer. Default = Current Month
*
* @return Last date of the month and year in yyyy-mm-dd format
*/
function last_day_of_the_month($date = '')
{
$month = date('m', strtotime($date));
$year = date('Y', strtotime($date));
$result = strtotime("{$year}-{$month}-01");
$result = strtotime('-1 second', strtotime('+1 month', $result));
return date('Y-m-d', $result);
}
$a_date = "2009-11-23";
echo last_day_of_the_month($a_date);
Jika Anda menggunakan ekstensi Carbon API untuk PHP DateTime, Anda bisa mendapatkan hari terakhir bulan itu dengan:
$date = Carbon::now();
$date->addMonth();
$date->day = 0;
echo $date->toDateString(); // use toDateTimeString() to get date and time
$date->day = 0;
Jika Anda punya waktu sebulan untuk mendapatkan tanggal terakhir bulan itu,
public function getLastDateOfMonth($month)
{
$date = date('Y').'-'.$month.'-01'; //make date of month
return date('t', strtotime($date));
}
$this->getLastDateOfMonth(01); //31
Berikut ini adalah fungsi lengkap:
public function get_number_of_days_in_month($month, $year) {
// Using first day of the month, it doesn't really matter
$date = $year."-".$month."-1";
return date("t", strtotime($date));
}
Ini akan menghasilkan berikut:
echo get_number_of_days_in_month(2,2014);
Output: 28
Ada beberapa cara untuk mendapatkan hari terakhir bulan ini.
//to get last day of current month
echo date("t", strtotime('now'));
//to get last day from specific date
$date = "2014-07-24";
echo date("t", strtotime($date));
//to get last day from specific date by calendar
$date = "2014-07-24";
$dateArr=explode('-',$date);
echo cal_days_in_month(CAL_GREGORIAN, $dateArr[1], $dateArr[0]);
Saya terlambat tetapi ada beberapa cara mudah untuk melakukan ini seperti yang disebutkan:
$days = date("t");
$days = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
$days = date("j",mktime (date("H"),date("i"),date("s"),(date("n")+1),0,date("Y")));
Menggunakan mktime () adalah tujuan saya untuk kontrol penuh atas semua aspek waktu ... IE
echo "<br> ".date("Y-n-j",mktime (date("H"),date("i"),date("s"),(11+1),0,2009));
Menyetel hari ke 0 dan menaikkan bulan 1 akan memberi Anda hari terakhir bulan sebelumnya. Angka 0 dan negatif memiliki pengaruh yang sama dalam argumen yang berbeda. PHP: mktime - Manual
Seperti yang dikatakan beberapa orang, strtotime bukanlah cara yang paling solid untuk digunakan dan sedikit jika tidak ada yang mudah serbaguna.
Saya menggunakan strtotime dengan cal_days_in_month sebagai berikut:
$date_at_last_of_month=date('Y-m-d', strtotime('2020-4-1
+'.(cal_days_in_month(CAL_GREGORIAN,4,2020)-1).' day'));
Saya telah membungkusnya dengan kelas pembantu waktu saya di sini
https://github.com/normandqq/Date-Time-Helper
menggunakan
$dateLastDay = Model_DTHpr::getLastDayOfTheMonth();
Dan itu dilakukan
Cara lain menggunakan mktime dan bukan tanggal ('t'):
$dateStart= date("Y-m-d", mktime(0, 0, 0, 10, 1, 2016)); //2016-10-01
$dateEnd = date("Y-m-d", mktime(0, 0, 0, 11, 0, 2016)); //This will return the last day of october, 2016-10-31 :)
Jadi cara ini menghitung apakah itu 31,30 atau 29
function first_last_day($string, $first_last, $format) {
$result = strtotime($string);
$year = date('Y',$result);
$month = date('m',$result);
$result = strtotime("{$year}-{$month}-01");
if ($first_last == 'last'){$result = strtotime('-1 second', strtotime('+1 month', $result)); }
if ($format == 'unix'){return $result; }
if ($format == 'standard'){return date('Y-m-d', $result); }
}
Ini cara yang jauh lebih elegan untuk mendapatkan akhir bulan:
$thedate = Date('m/d/Y');
$lastDayOfMOnth = date('d', mktime(0,0,0, date('m', strtotime($thedate))+1, 0, date('Y', strtotime($thedate))));
Anda dapat menggunakan " t
" fungsi tanggal untuk mendapatkan jumlah hari di bulan tertentu.
Kode akan menjadi seperti ini:
function lastDateOfMonth($Month, $Year=-1) {
if ($Year < 0) $Year = 0+date("Y");
$aMonth = mktime(0, 0, 0, $Month, 1, $Year);
$NumOfDay = 0+date("t", $aMonth);
$LastDayOfMonth = mktime(0, 0, 0, $Month, $NumOfDay, $Year);
return $LastDayOfMonth;
}
for($Month = 1; $Month <= 12; $Month++)
echo date("Y-n-j", lastDateOfMonth($Month))."\n";
Kode ini dijelaskan sendiri. Jadi harap ini membantu.