2017-04-09 27 views
1

我應該對此有任何問題嗎?在PHP的午夜十二點獲取Yesterdays日期

我的正是午夜

0 0 * * * /usr/bin/php myscript.php 

腳本設置定義前一天在MySQL時間戳格式日期設置cron作業。

$midnightyesterday2 = (new DateTime())->setTime(0, 0); 
$midnightyesterday2->modify('-1 day'); 
$midnightyesterday = $midnightyesterday2->format("Y-m-d H:i:s"); 

回波輸出:

2017年4月8日00:00:00

$endofdayyesterday2 = (new DateTime())->setTime(23, 59, 59); 
$endofdayyesterday2->modify('-1 day'); 
$endofdayyesterday = $endofdayyesterday2->format("Y-m-d H:i:s"); 

回波輸出:

2017年4月8日23:59:59

顯然,這樣本輸出是否正常工作,因爲我這樣做是在十五點22分00秒。

難道我只是想在午夜設置一個cron工作,如果劇本因爲某種原因早點跑了一小部分,甚至可能會導致衝突,甚至半秒鐘。

是否有更好的方法來確保昨天的日期與腳本設置爲正好在午夜運行?

我需要它正好在午夜運行,因爲腳本基於MySQL lastmodified時間戳,因爲我的回聲表明,甚至在12:01運行它可能會留下一些額外的行後面添加在那一分鐘。

+0

你很好,你的cron工作只會運行一次和午夜,你根本不需要擔心。不過,真的,如果是午夜或任何時候,它只會運行一次都沒關係。 –

+1

讓系統依賴於正好在午夜運行的作業似乎非常危險。你應該想出另一種方法來實現你的目標。 –

+0

@Evan Carslake:我知道它只會運行一次,但我擔心的是,因爲它在午夜運行,DateTime可能會搞砸,我可能會重複。 @Gordon Linoff:因此,這個問題:)我想知道如果我可以添加12小時的日期時間,然後設置時間爲'00:00:00'或者如果有更好的方法 –

回答

0

我的解決方案(那種在評論來找我的)是做到以下幾點:

記住,腳本被設置爲正是午夜(00:00:00)運行。

因此,我設置了一個新的DateTime對象,並增加了12個小時。 (12:00:00)

然後,在將其移動12小時後,使用setTime將時間設置爲00:00:00。

然後再使用DateTime的modify減去24小時。

$midnightyesterday2 = new DateTime(); 
$midnightyesterday2->modify('+12 hour'); 
$midnightyesterday2->setTime(0, 0); 
$midnightyesterday2->modify('-24 hour'); 
$midnightyesterday = $midnightyesterday2->format("Y-m-d H:i:s"); 
echo $midnightyesterday; 

2017年4月8日00:00:00

同樣的,讓一天結束昨日導致

$endofdayyesterday2 = new DateTime(); 
$endofdayyesterday2->modify('+12 hour'); 
$endofdayyesterday2->setTime(23, 59, 59); 
$endofdayyesterday2->modify('-24 hour'); 
$endofdayyesterday = $endofdayyesterday2->format("Y-m-d H:i:s"); 
echo $endofdayyesterday; 

2017-04-08 23:59:59

我不是說這是做這件事的最好方法,這個想法只是來找我。但似乎可能會爲我正在嘗試做的事情增加一種失敗保險。

如果有人有一個更好或更合適的解決方案,我會讓這個打開一段時間。