2017-04-09 25 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

我不是说这是做这件事的最好方法,这个想法只是来找我。但似乎可能会为我正在尝试做的事情增加一种失败保险。

如果有人有一个更好或更合适的解决方案,我会让这个打开一段时间。