在 php 中查找 2 个 unix 时间戳之间的天数

2022-08-30 14:34:12

干嘛,我有一个数据库保存事件。有2个字段“开始”和“结束”,它们包含时间戳。当管理员输入这些日期时,他们只能设置日,月,年。因此,我们只处理包含天,月,年,而不是小时,分钟,秒的邮票(小时,分钟和秒设置为0,0,0)。

我有一个事件,其中开始时间为1262304000,结束时间为1262908800。这些转换为2010年1月1日和2010年1月8日。我如何获得这些时间戳之间的所有天数?我希望能够返回 2010 年 1 月 2 日 (1262390400), 2010 年 1 月 3 日 (1262476800) ..一直到结束邮票。这些事件可能会跨越不同的月份,比如5月28日至6月14日。

任何想法如何做到这一点?


答案 1

您只需要计算两个日期之间的秒数,然后除以得到天数:

$numDays = abs($smallestTimestamp - $biggestTimestamp)/60/60/24;

然后,您可以使用 for 循环来检索日期:

$numDays = abs($smallestTimestamp - $biggestTimestamp)/60/60/24;

for ($i = 1; $i < $numDays; $i++) {
    echo date('Y m d', strtotime("+{$i} day", $smallestTimestamp)) . '<br />';
}

同样,如果您不知道哪个时间戳最小,则可以使用min()函数(strtotime中的第二个参数)。


答案 2

我认为一个快速的解决方法是从end_stamp中减去一天的秒数,直到你到达start_tag。

//1 day = 86400 seconds

我会构建一个日数组供以后使用。

编辑(示例)

$difference = 86400;
$days = array();
while ( $start_time < $end_time )
{
    $days[] = date('M j Y', $end_time);

    $end_time -= $difference;
}

这应该涵盖任何时间范围,即使它超过几个月。


推荐