簡體   English   中英

PHP 或 Laravel 下個月的最后一天

[英]Last day of next month in PHP or Laravel

當我嘗試通過 PHP 或 Laravel 碳獲取下個月的最后一天時,一切正常,但是當我嘗試從特定日期 2023-01-31 獲取下個月的最后一天時,通過

date('Y-m-01', strtotime('next month', strtotime('2023-01-31')));

或者

Carbon::createFromFormat('Y-m-d H:m:00:000', '2023-01-31')->addMonth()->format('Y-m-t H:m:00:000');

那個時候output結果是2023-03-31給出的,但是下個月的最后一天是2023-02-28。 那么我該如何解決呢? 它無法正常工作。

$instituter = Institute::where('code', $instInfo->institute_code)->first();
            // $institute = Carbon::createFromFormat('Y-m-d H:m:00:000', $institute->institute_expire)->addMonth()->format('Y-m-d H:m:00:000');
            // $expire = $instituter->institute_expire;
            // $inst = Carbon::createFromFormat('Y-m-d H:i:00.000', $instituter->institute_expire)->addMonths(6)->startOfMonth()->format('Y-m-d');
            $inst = date('Y-m-01', strtotime('next month', strtotime($instituter->institute_expire)));
            // $inst = Carbon::createFromFormat('Y-m-d H:i:00.000', $instituter->institute_expire)->addMonths(6)->startOfMonth();
            // $institute = Carbon::createFromFormat('m/d/Y', $instituter->institute_expire)->addMonth();

嘗試以下操作。

$date = Carbon::createFromFormat('Y-m-d', '2023-01-31');
$nextMonth = $date->modify('Last Day of Next Month');
echo $nextMonth->format('Y-m-d');

這將是 output 2023-02-28

日期以字符串形式給出。

$strDate = '2023-01-15';

基於此日期,將為下個月的最后一天創建日期 object。 使用 DateTime,這可以在一行中完成。

$lastDdayOfNextMonth = date_create('last day of next month '.$strDate);

Carbon 是 DateTime 的擴展。 因此這也適用:

$lastDdayOfNextMonth = Carbon::create('last day of next month '.$strDate);

echo $lastDdayOfNextMonth->format('c');
//2023-02-28T00:00:00+01:00

如果日期已經作為 object 存在,那就更容易了。

$dt = new DateTime('2023-01-15');

$lastDdayOfNextMonth = $dt->modify('last day of next month');

這再次與碳完全相同。

$dt = new Carbon('2023-01-15');

$lastDdayOfNextMonth = $dt->modify('last day of next month');

提防帶有 Carbon 的 addMonth() 解決方案或 DateTime 的“下個月”解決方案。 與問題一樣,舊版本也會返回日期“2023-01-31”的錯誤結果。 Carbon 有一個特殊的方法來添加“沒有溢出”的月份: addMonthsNoOverflow()

$endOfNextMonth = Carbon::create('2023-01-31')
  ->addMonthsNoOverflow(1)
  ->endOfMonth()
;

echo $endOfNextMonth;  //2023-02-28 23:59:59

從 Laravel 5.5 開始,您可以使用 now() function 獲取當前日期和時間,您可以使用以下方法獲取下個月的最后一個日期:

now()->addMonth()->endOfMonth();

如果你想格式化為 Ymd

now()->addMonth()->endOfMonth()->format('Y-m-d');

或者如果你只想獲得日期更改格式 $now->format('d');

如果您使用的是 laravel 版本低於 5.5 使用上述功能作為

\Carbon\Carbon::now()->addMonth()->endOfMonth();

strtotime 會這樣做...

例如

echo date('c', strtotime('last day of next month'));

給出例如 2023-02-28T19:53:34+00:00,而今天是 2023/01/21。

或者 -

ècho (new DateTime('last day of next month'))->format('c')

也會工作

$next_month_last_date = date("Y-m-t", strtotime("+1 month"));

t => 該月的天數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM