0

我在我们的一个项目中实施了倒计时。因为这是我的第一个倒计时,我才意识到如果我告诉 PHP:

$timeleft = strtotime('2013-10-31') - strtotime('now');
$daysleft = floor( $timeleft/(24*60*60) );

我得到了剩下的时间2013-10-31 00:00而不是一整天。

为什么会这样?我预计2013-10-31 23:59:592013-11-01 00:00

举个日常生活的例子:我有一份到2013-10-31的汽车租赁合同,或者任何合同,那么我知道租赁期间总是包括最后一天。

这似乎是一个初学者的问题,但我想知道这个决定的原因。感谢您的想法和经验。


PS:所有编程语言都一样吗?

4

3 回答 3

2

然后也给点时间strtotime

$timeleft = strtotime('2013-10-31 23:59:59') - strtotime('now');

为什么?

因为当你说:

strtotime('2013-10-31');

这意味着该日期开始时的确切时间戳,相当于说:

strtotime('2013-10-31 00:00:00');  // hence the missing 24 hours

编辑

事实上,说strtotime('now')就像说time(),所以你也可以删除它。并拥有它:

$timeleft = strtotime('2013-10-31 23:59:59') - time();

PS:所有编程语言都一样吗?

无论如何,它不是任何语言的语言限制。它是您如何解释为您生成时间的函数。在正确解释它之后,给它发送正确的值,它就会像你期望的那样工作。

于 2013-11-01T10:51:26.243 回答
1

这样做的原因与金钱的原因相同:1 欧元 = 1.00 欧元,而不是 1.50 欧元。

如果一天中的时间很重要,您应该在两个对象中定义它。

于 2013-11-01T10:59:08.043 回答
1

由于日期可能不明确,时区不同,夏令时 - 甚至是运行它的系统架构,建议使用内置DateTime对象。

有许多方法可用于操纵日期,例如DateTime::diff()无需所有手动计算(即。floor( $timeleft/(24*60*60) );)。

因此,在比较日期间隔和/或将它们相加时,它们可能会为您提供更好的灵活性和准确性。

$date = new DateTime('2013-10-31');
$now  = new DateTime('today');
$diff = $date->diff($now);
$new  = $date->add($diff);

echo $new->format('Y-m-d H:i'); // 2013-11-01 00:00
于 2013-11-01T11:11:24.873 回答