在php中的2个unix时间戳之间寻找天数
干草,我有一个数据库举办活动。有两个字段'开始'和'结束',它们包含时间戳。当管理员输入这些日期时,他们只能设置日,月,年。所以我们只处理包含日,月,年,不是几小时,几分钟,几秒(几小时,几分钟和几秒设置为0,0,0)的邮票。在php中的2个unix时间戳之间寻找天数
我有一个事件,开始时间为1262304000,结束时间为1262908800.这些转换为2010年1月1日和2010年1月8日。我如何获得这些时间戳之间的所有日子?我希望能够在2010年1月2日(1262390400),2010年1月3日(1262476800)返回。一直到结束邮票。这些事件可能会跨越到不同的月份,例如5月28日至6月14日。
任何想法如何做到这一点?
你只需要计算两个日期之间的秒数,再除以得到天:
$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中的第二个参数)。
有没有办法来修改它,以便它们周围的方式无关紧要? – dotty 2010-11-02 16:36:44
是的,在整个事情上使用abs()函数。 – 2010-11-02 16:37:13
这会给你两天之间有多少天,但不是日,月或年。 – 2010-11-02 16:41:31
我认为对此的一个快速解决方法是从end_stamp减去秒数的天数,直到你到达start_tag。
//1 day = 86400 seconds
我会建立一个日后使用的数组。
EDIT(实施例)
$difference = 86400;
$days = array();
while ($start_time < $end_time)
{
$days[] = date('M j Y', $end_time);
$end_time -= $difference;
}
这应包括的任何时间帧,即使其超过一堆几个月。
试试这个:
while($date_start <= $date_end) {
echo date('M d Y', $date_start) . '<br>';
$date_start = $date_start + 86400;
}
希望这有助于!
是这样的吗?
$day = $start;
while ($day < $end) {
$day += 86400;
echo $day.' '.date('Y-m-d', $day).PHP_EOL;
}
顺便说一句,1262304000是12月31日,而不是月1
将返回日期 - 1.您需要使用' 2010-11-02 16:44:16
他之间说,所以我认为它是完全的。 – netcoder 2010-11-02 17:08:58
啊,的确如此!我误解了这个问题,我的错误。 – 2010-11-02 17:48:47
得到两个日期的差别,并通过86400 ABS把它(($ DATE1 - $ date2的)/ 86400),会产生所需的结果
$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>";
$daysInBetween = range($startTs, $endTs, 86400);
$secondDay = date('M d Y', $daysInBetween[1]);
/*
$thirdDay = date('M d Y', $daysInBetween[2]);
...
*/
请注意,range()
函数是包容性的。
**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";
可能重复[如何找到指定的两个日期之间的日期](http:// stackoverflow。com/questions/2736784 /如何找到指定的日期之间的日期) – Gordon 2010-11-02 16:38:08
所有这些解决方案调整86400将失败时日期跨度夏时制改变 – 2010-11-02 16:42:45
Mark Baker>这是unix时间戳的问题。使用DateTime类可能更合适,虽然我没有检查我们是否可以轻松做到这一点。 – 2010-11-02 16:45:24