为什么PHP DateTime :: setTime会导致strtotime怪异的行为?

时间:2019-03-15 15:45:57

标签: php datetime strtotime

我正在尝试将日期更改为服务器时间并更正其时间。我找不到\ DateTime :: setTime之后不希望更改日期的原因。

$now = new \DateTime();

$nextFriday = new \DateTime('@' . strtotime('next friday', $now->getTimestamp()));

我知道了:2019-03-21 23:00:00.0 +00:00

$nextFriday->setTime(12, 30);

我知道了:2019-03-21 12:30:00.0 +00:00

$nextNextFriday = new \DateTime('@' . strtotime('next friday', $nextFriday->getTimestamp()));

现在,发生了什么事情

2019-03-21 23:00:00.0 +00:00

1 个答案:

答案 0 :(得分:4)

我相信要重置时间的原因是,相对的PHP日期修饰符'next ...'总是将时间重置为实际上是“下一个……的开始”。

为什么获得23:00:00+00:00可能是由于服务器与系统上设置的时区不同(假设本地开发)。

如果您需要相对日期,请使用:

<?php

$now = new \DateTime();

$nextFriday = clone $now;

$nextFriday->modify('next friday');
// also here time will be 00:00:00

$nextFriday->setTime(12,30);

var_dump($nextFriday);
// "2019-03-22 12:30:00.000000"