PHP'de ayın son gününü nasıl alabilirim?
Verilen:
$a_date = "2009-11-23"
2009-11-30 istiyorum; ve verildi
$a_date = "2009-12-23"
2009-12-31 istiyorum.
PHP'de ayın son gününü nasıl alabilirim?
Verilen:
$a_date = "2009-11-23"
2009-11-30 istiyorum; ve verildi
$a_date = "2009-12-23"
2009-12-31 istiyorum.
Yanıtlar:
t
belirli bir tarihin ayındaki gün sayısını döndürür ( için dokümanlara bakındate
):
$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));
DateTime
böyle bir şey yapabilirsiniz:(new DateTime('2009-11-23'))->modify('last day of')
Strtotime () kullanan kod 2038 yılından sonra başarısız olacaktır. (Bu konudaki ilk cevapta verildiği gibi) Örneğin aşağıdakileri kullanmayı deneyin:
$a_date = "2040-11-23";
echo date("Y-m-t", strtotime($a_date));
Aşağıdaki gibi cevap verecektir: 1970-01-31
Bu nedenle strtotime yerine DateTime işlevi kullanılmalıdır. Aşağıdaki kod Yıl 2038 sorunu olmadan çalışacaktır:
$d = new DateTime( '2040-11-23' );
echo $d->format( 'Y-m-t' );
strtotime
kod bana bu sonucu veriyor: 2040-11-30
Bu biraz geç biliyorum ama DateTime sınıfını PHP 5.3+
kullanarak bunu yapmak için daha zarif bir yolu olduğunu düşünüyorum :
$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');
Ayrıca yerleşik PHP işlevi cal_days_in_month () var mı?
"Bu işlev, belirtilen takvim için yılın ayındaki gün sayısını döndürür." http://php.net/manual/en/function.cal-days-in-month .
echo cal_days_in_month(CAL_GREGORIAN, 11, 2009);
// = 30
Bu çalışmalı:
$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/>';
Sorun nedir - Benim için en şık olanı kullanmak DateTime
Acaba görmüyorum DateTime::createFromFormat
, tek astarlı
$lastDay = \DateTime::createFromFormat("Y-m-d", "2009-11-23")->format("Y-m-t");
Gelecek ayın ilk günü için bir tarih oluşturabilir ve ardından strtotime("-1 day", $firstOfNextMonth)
mktime(0, 0, 0, $month+1, 0, $year);
strtotime()
ve mktime()
cesaretini kırmaktadır. kenarında tarih belirleme ve artık yıl kalalasyonları gibi bilinen hataların. Beri DateTime
mevcut olup ileride herhangi sorunlardan kaçınmak için bu sınıfı kullanmalıdır. Gibi bu iki fonksiyon, benden önce birçok kez adı geçen strtotime()
ve mktime()
2038 sonrasında başarısız olur Ben downvoted neden en ...
PHP 5.3+ kullanıyorsanız bunu deneyin,
$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');
Geçen ayın son ayını bulmak için aşağıdaki gibi değiştirin,
$date->modify('last day of 1 month');
echo $date->format('Y-m-d');
ve bunun gibi..
Çözümünüz burada ..
$lastday = date('t',strtotime('today'));
31
için September
size bu doğru değil bildiği gibi hangi.
Ayın son gününü birkaç yolla bulabilirsiniz. Ama sadece bunu PHP strtotime () ve date () fonksiyonunu kullanarak yapabilirsiniz . Son kodunuzun şöyle görüneceğini hayal ediyorum:
$a_date = "2009-11-23";
echo date('Y-m-t',strtotime($a_date));
Ancak PHP> = 5.2 kullanıyorsanız, yeni DateTime nesnesini kullanmanızı kesinlikle öneririm. Örneğin aşağıdaki gibi:
$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');
Ayrıca, aşağıdaki gibi kendi işlevinizi kullanarak bunu çözebilirsiniz:
/**
* 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);
PHP DateTime için Carbon API uzantısını kullanırsanız , ayın son gününü aşağıdakilerle alabilirsiniz:
$date = Carbon::now();
$date->addMonth();
$date->day = 0;
echo $date->toDateString(); // use toDateTimeString() to get date and time
$date->day = 0;
Bir ayınız varsa ayın son tarihini alın,
public function getLastDateOfMonth($month)
{
$date = date('Y').'-'.$month.'-01'; //make date of month
return date('t', strtotime($date));
}
$this->getLastDateOfMonth(01); //31
İşte tam bir işlev:
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));
}
Bu, aşağıdakilerin çıktısını alır:
echo get_number_of_days_in_month(2,2014);
Çıktı: 28
Ayın son gününü almanın yolları var.
//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]);
Geç kaldım ama belirtildiği gibi bunu yapmanın birkaç kolay yolu var:
$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")));
Mktime () kullanmak zaman tüm yönleri üzerinde tam kontrol için benim gitmek olduğunu ... IE
echo "<br> ".date("Y-n-j",mktime (date("H"),date("i"),date("s"),(11+1),0,2009));
Günü 0 olarak ayarlamak ve ayınızı 1 yukarı taşımak bir önceki ayın son gününü verecektir. 0 ve negatif sayılar farklı tartışmalarda benzer etkiye sahiptir. PHP: mktime - Manual
Birkaçının söylediği gibi, strtotime gitmek için en sağlam yol değildir ve hiçbiri kolayca çok yönlü değilse çok azdır.
Aşağıdaki gibi cal_days_in_month ile strtotime kullanıyorum:
$date_at_last_of_month=date('Y-m-d', strtotime('2020-4-1
+'.(cal_days_in_month(CAL_GREGORIAN,4,2020)-1).' day'));
Ben burada tarih saat yardımcı sınıfına sarılmış
https://github.com/normandqq/Date-Time-Helper
kullanarak
$dateLastDay = Model_DTHpr::getLastDayOfTheMonth();
Ve bitti
Tarih değil, mktime kullanmanın başka bir yolu ('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 :)
Bu şekilde, 31,30 veya 29 ise
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); }
}
Bu, ayın sonunu almak için çok daha zarif bir yol:
$thedate = Date('m/d/Y');
$lastDayOfMOnth = date('d', mktime(0,0,0, date('m', strtotime($thedate))+1, 0, date('Y', strtotime($thedate))));
t
Belirli bir aydaki gün sayısını almak için tarih işlevinde " " kullanabilirsiniz .
Kod şöyle bir şey olacaktır:
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";
Kod kendi kendini açıklar. Umarım yardımcı olur.