亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否有任何日期/時間該功能可能會中斷?

是否有任何日期/時間該功能可能會中斷?

PHP
慕哥6287543 2023-07-15 10:19:14
我以前從未見過這樣的事情。這是返回預期答案(一系列五個日期)的函數的一部分......有時。例如,它在早上 6 點運行,結果有時不正確:五個日期中的一個(無論是第一個還是最后一個)可能會丟失。其他時候,還好。相同的代碼,僅在幾個小時后運行。我知道處理日期可能比乍一看要復雜得多,但這讓我很困惑。我只能希望這是我對 DateTime 對象缺乏經驗造成的。    $start = new \DateTime(date("Y-m-d", strtotime("-1 day")));     $end = new \DateTime(date("Y-m-d", strtotime("-5 days")));     $diff = $end->diff($start);    $interval = \DateInterval::createFromDateString('-1 day');    $period = new \DatePeriod($start, $interval, $diff->days);     foreach($period as $date) {        echo $date->format("Y-m-d"); // Sometimes first or last date will be missing    }例如,如果代碼在2020-07-05 00:00:00和 之間運行2020-07-05 23:59:59,它應該返回最后五個日期:2020-07-042020-07-032020-07-022020-07-012020-06-30我已經手動運行具有不同日期/時間的代碼,并且無法重新創建該錯誤......但它在生產中每隔幾天就會發生一次。這只是普通的 PHP,但它作為 Laravel 項目的一部分運行,應該考慮到這一點。(應用程序時區設置為“歐洲/倫敦”。)
查看完整描述

2 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

我不喜歡你如何定義$start和$end。如果我沒記錯的話,如果服務器時鐘恰好在定義的兩個變量之間滴答到下一秒,那么您的間隔將是 3 天 23 小時 59 分鐘 59 秒,而不是正好 4 天。這會打亂你對$diff->daysto be3而不是 的定義4,導致日期缺失。


我在這里建議采用不同的方法。具體來說,從當前日期開始,減去一天所需的次數 - 因為這似乎被硬編碼為 5。


$date = new DateTime();

$interval = new DateInterval("P1D");

for( $i=0; $i<5; $i++) {

    $date->sub($interval);

    echo $date->format("Y-m-d")."\n";

}

$i<5當然,可以將其重構$i < DAYS為一些適當的常量定義,以避免“幻數”并允許在未來的開發中進行更改。


查看完整回答
反對 回復 2023-07-15
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

使用 DateTime(以及 strtotime),可以處理“今天 -3 天”等表達式。今天始終是 00:00。計算可以簡化如下:


$days = 5;

for( $i=1; $i<=$days; $i++) {

  echo date_create("today -$i days")->format('Y-m-d')."<br>\n";

}


查看完整回答
反對 回復 2023-07-15
  • 2 回答
  • 0 關注
  • 193 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號