gpt4 book ai didi

php-5.2 - 计算 'Midnights' 在 PHP 中一个日期过去了另一个日期?

转载 作者:可可西里 更新时间:2023-11-01 01:09:04 25 4
gpt4 key购买 nike

我有一个计算的开始/结束时间,我正在尝试进行计算,但在查看结束时间是否在开始时间后的第二天凌晨 12 点之前时遇到问题。另外,我需要计算开始时间过去了多少天。

我有:开始日期、结束日期

我需要: - 结束日期比开始日期晚多少个“午夜”?

有没有人做过这样的事情?

最佳答案

这使用 PHP 5.3,如果您使用的是早期版本,则可能需要使用 unix 时间戳来找出差异。假设开始时间和结束时间相同,午夜数应该是相差的天数。因此,将两者都设置为当天的午夜 setTime(0,0),应该可以使计算正确。

使用 DateTime 对象。

$start = new DateTime('2011-03-07 12:23:45');
$end = new DateTime('2011-03-08 1:23:45');

$start->setTime(0,0);
$end->setTime(0,0);

$midnights = $start->diff($end)->days;

如果不使用 setTime() 调用,这将导致 0,因为开始和结束之间的时间少于 24 小时。使用 setTime() 结果为 1,因为现在时差正好是 24 小时。

diff() 函数是在 5.3 中与 DateInterval 类一起引入的。在 5.2 中,您仍然可以使用 DateTime 类,但必须使用 Unix 时间戳计算总天数。

$midnights = ($end->format('U') - $start->format('U')) / 86400

您可以将其包装在 abs() 函数中,开始/结束的顺序无关紧要。

注意:这些功能可能需要针对涉及 DST 的情况进行测试。

php date documentation 中的评论在除以 86400(一天中的秒数)后使用 round,以应对 DST 可能涉及的任何问题。

DateTimes 的另一种方法是在 UTC 中创建它们。

$utcTimezone = new DateTimeZone('UTC');
$start = new DateTime('2011-03-07 12:23:45', $utcTimezone);
$end = new DateTime('2011-03-08 1:23:45', $utcTimezone);

关于php-5.2 - 计算 'Midnights' 在 PHP 中一个日期过去了另一个日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5215190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com