Cara menggunakan current day number php

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.

t mengembalikan jumlah hari dalam bulan dari tanggal yang ditentukan (lihat dokumen untuk date ):

$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));

Kode yang menggunakan strtotime () akan gagal setelah tahun 2038. (seperti yang diberikan dalam 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' );

Saya tahu ini sedikit terlambat tetapi saya pikir ada cara yang lebih elegan untuk melakukan ini dengan PHP 5.3+ dengan menggunakan kelas DateTime :

$date = new DateTime('now');
$date->modify('last day of this month');
echo $date->format('Y-m-d');

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/>';

Anda dapat membuat tanggal untuk yang pertama bulan berikutnya, dan kemudian menggunakan strtotime("-1 day", $firstOfNextMonth)

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 lalu, ubah sebagai berikut,

 $date->modify('last day of 1 month');
 echo $date->format('Y-m-d');

dan seterusnya..

Apa yang salah - Yang paling elegan bagi saya adalah menggunakan DateTime

Saya heran saya tidak melihat DateTime::createFromFormat , satu-liner

$lastDay = \DateTime::createFromFormat("Y-m-d", "2009-11-23")->format("Y-m-t");

Solusi Anda ada di sini ..

$lastday = date('t',strtotime('today'));

Jika Anda menggunakan Karbon ekstensi 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 

Anda dapat menemukan beberapa hari terakhir dalam bulan ini. Tapi cukup Anda bisa melakukan ini menggunakan PHP strtotime () dan date () function. Saya membayangkan kode akhir Anda akan terlihat seperti ini:

$a_date = "2009-11-23";
echo date('Y-m-t',strtotime($a_date));

Demo Langsung

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');

Demo Langsung

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);

Anda juga dapat menggunakannya dengan datetime

$date = new \DateTime();
$nbrDay = $date->format('t');
$lastDay = $date->format('Y-m-t');

Menggunakan Zend_Date sangat mudah:

$date->setDay($date->get(Zend_Date::MONTH_DAYS));

$date1 = $year.'-'.$month; 
$d = date_create_from_format('Y-m',$date1); 
$last_day = date_format($d, 't');

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

Saya terlambat tetapi ada beberapa cara mudah untuk melakukan ini sebagaimana 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 ... I.E.

echo "<br> ".date("Y-n-j",mktime (date("H"),date("i"),date("s"),(11+1),0,2009));

Menyetel hari ke 0 dan menaikkan bulan ke 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.

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]); 

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

Karbon ekstensi API untuk PHP DateTime

Carbon::parse("2009-11-23")->lastOfMonth()->day;

atau

Carbon::createFromDate(2009, 11, 23)->lastOfMonth()->day;

akan kembali

30

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