为什么 PHP DateTime::setTime 会导致 strtotime 的奇怪行为?
Why does PHP DateTime::setTime causes weird behavior of 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
我相信时间被重置的原因是相对 PHP 日期修饰符 'next ...'
总是将时间重置为实际 "beginning of 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"
我正在尝试更改几次日期并更正其时间。我找不到日期不想在 \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
我相信时间被重置的原因是相对 PHP 日期修饰符 'next ...'
总是将时间重置为实际 "beginning of 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"