在php中查找2个unix时间戳之间的天数
Posted
技术标签:
【中文标题】在php中查找2个unix时间戳之间的天数【英文标题】:Finding days between 2 unix timestamps in php 【发布时间】:2011-05-04 01:10:59 【问题描述】:嘿,我有一个保存事件的数据库。有 2 个字段“开始”和“结束”,它们包含时间戳。当管理员输入这些日期时,他们只能设置日、月、年。所以我们只处理包含天、月、年的戳记,而不是小时、分钟、秒(小时、分钟和秒设置为 0,0,0)。
我有一个事件,开始时间为 1262304000,结束时间为 1262908800。这些转换为 2010 年 1 月 1 日和 2010 年 1 月 8 日。我如何获得这些时间戳之间的所有天数?我希望能够返回 2010 年 1 月 2 日 (1262390400)、2010 年 1 月 3 日 (1262476800) .. 一直到最后的邮票。这些事件可能会跨越不同的月份,比如 5 月 28 日到 6 月 14 日。
任何想法如何做到这一点?
【问题讨论】:
how to find the dates between two dates specified的可能重复 当日期跨度夏令时更改时,所有这些通过 86400 调整的解决方案都将失败 Mark Baker > 这就是 unix 时间戳的问题。使用 DateTime 类可能更合适,尽管我没有检查我们是否可以轻松做到这一点。 @Vincent - 在 Gordon 的链接中有一个使用 datePeriod/dateInterval/dateTime 的示例代码块。 【参考方案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 中的第二个参数)。
【讨论】:
有没有办法修改它,这样无论它们是哪种方式都无关紧要? 是的,在整个事情上使用 abs() 函数。 这会告诉你两个日期之间有多少天,但不是日、月或年。 是的,但是你可以使用 for 循环和 strtotime。我只是编辑我的帖子。abs
是多余的,一旦您知道哪个是较小的,哪个是较大的时间戳。相反,我会使用if($small > $big) list($small,$big) = array($big,$small)
来交换它们。【参考方案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;
这应该涵盖任何时间范围,即使它超过几个月。
【讨论】:
【参考方案3】:试试这个:
while($date_start <= $date_end)
echo date('M d Y', $date_start) . '<br>';
$date_start = $date_start + 86400;
希望这会有所帮助!
【讨论】:
【参考方案4】:$d1=mktime(22,0,0,1,1,2007);
$d2=mktime(0,0,0,1,2,2007);
echo "Hours difference = ".floor(($d2-$d1)/3600) . "<br>";
echo "Minutes difference = ".floor(($d2-$d1)/60) . "<br>";
echo "Seconds difference = " .($d2-$d1). "<br>";
echo "Month difference = ".floor(($d2-$d1)/2628000) . "<br>";
echo "Days difference = ".floor(($d2-$d1)/86400) . "<br>";
echo "Year difference = ".floor(($d2-$d1)/31536000) . "<br>";
http://www.plus2net.com/php_tutorial/date-diff.php
http://www.phpf1.com/tutorial/php-date-difference.html
【讨论】:
【参考方案5】:$daysInBetween = range($startTs, $endTs, 86400);
$secondDay = date('M d Y', $daysInBetween[1]);
/*
$thirdDay = date('M d Y', $daysInBetween[2]);
...
*/
请注意,range()
函数具有包容性。
【讨论】:
【参考方案6】: **This is a very simple code for find days hours minutes and seconds in php**
$dbDate = strtotime("".$yourbdDate.""); // Database date
$endDate = time(); // current time
$diff = $endDate - $dbDate; /// diffrence
$days = floor($diff/86400); /// number of days
$hours = floor(($diff-$days*86400)/(60 * 60)); //// number of hours
$min = floor(($diff-($days*86400+$hours*3600))/60);///// numbers of minute
$second = $diff - ($days*86400+$hours*3600+$min*60); //// secondes
if($days > 0) echo $days." Days ago";
elseif($hours > 0) echo $hours." Hours ago";
elseif($min > 0) echo $min." Minute ago";
else echo "Just second ago";
【讨论】:
【参考方案7】:这样的?
$day = $start;
while ($day < $end)
$day += 86400;
echo $day.' '.date('Y-m-d', $day).PHP_EOL;
顺便说一句,1262304000 是 12 月 31 日,而不是 1 月 1 日。
【讨论】:
将返回天数 - 1. 您需要使用<=
运算符。
他说在中间,所以我以为是排他性的。【参考方案8】:
获取两个日期的差,然后除以 86400。abs(($date1 - $date2) / 86400) 将产生所需的结果
【讨论】:
以上是关于在php中查找2个unix时间戳之间的天数的主要内容,如果未能解决你的问题,请参考以下文章
PHP 函数返回两个unix时间戳之间的时间量,因为它将被语言化。