我需要對 PHP 中的某些日期進行一些檢查,以根據用戶的選擇從資料庫中檢索資料,因此我使用了以下代碼:
if ($request->flagMonth == -1) {
$query->where(
['month', '=', (idate('m')-1)],
['year', '>=', (idate('Y')-1)]
);
}
if ($request->flagMonth == 0) {
$query->where(
['month', '=', idate('m')],
['year', '=', idate('Y')]
);
}
if ($request->flagMonth == 1) {
$query->where(
['month', '=', (idate('m') 1)],
['year', '>=', idate('Y')]
);
}
問題是:當idate('m')是 1or 時-1,結果可以是0or 13- 當然這不是有效的月份值。
我可以呼叫不同的函式來操作日期嗎?
uj5u.com熱心網友回復:
如前所述,您使用的idate是數字月份,當然,當您減去或添加時,它不會滾動,因為它只是一個數字。最好的方法是使用 DateTime,或者因為您使用 Laravel、Carbon 創建日期,進行數學計算,然后獲取您要查找的數字。Laravelnow()用作快捷方式Carbon::now()
if ($request->flagMonth == -1) {
$now = now()->firstOfMonth()->subMonth();
$query->where(
['month', '=', $now->month],
['year', '>=', $now->year]
);
}
else if ($request->flagMonth == 0) {
$query->where(
['month', '=', now()->month],
['year', '=', now()->year]
);
}
else if ($request->flagMonth == 1) {
$now = now()->firstOfMonth()->addMonth();
$query->where(
['month', '=', $now->month],
['year', '>=', $now->year]
);
}
請注意,我firstOfMonth在加法或減法時使用。這是因為當您到月底時,它會變得不穩定,因為并非所有月份都存在所有天數。
uj5u.com熱心網友回復:
從當月的第一天開始創建一個日期時間物件,然后使用 修改日期$request->flagMonth,然后呼叫 format()` 以訪問調整后的日期的所需部分。這種使用每月第一天的預防措施可以防止此處提到的錯誤影響。
不需要任何條件。
$d = new DateTime('first day of this month');
$d->modify("$request month");
$query->where(
['month', '=', $d->format('n')],
['year', '=', $d->format('Y')]
);
示范
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/365246.html
