PHPdate计算

什么是最好的(date格式独立的方式)在PHP中计算指定格式的两个date之间的天差异。

我尝试了以下function:

function get_date_offset($start_date, $end_date) { $start_time = strtotime($start_date); $end_time = strtotime($end_date); return round(($end_time-$start_time)/(3600*24)); } 

它在linux上运行正常,但在windows下运行时会返回“'。

编辑

inputdate的格式为mm / dd / yyyy ,但是我想让它接受$ format作为参数。

我只需要天差。

Solutions Collecting From Web of "PHPdate计算"

如果你不想要或者你不能使用Zend Framework或Pear包,试试这个功能,我希望这将有助于:

 function dateDifference($date1, $date2) { $d1 = (is_string($date1) ? strtotime($date1) : $date1); $d2 = (is_string($date2) ? strtotime($date2) : $date2); $diff_secs = abs($d1 - $d2); $base_year = min(date("Y", $d1), date("Y", $d2)); $diff = mktime(0, 0, $diff_secs, 1, 1, $base_year); return array ( "years" => abs(substr(date('Ymd', $d1) - date('Ymd', $d2), 0, -4)), "months_total" => (date("Y", $diff) - $base_year) * 12 + date("n", $diff) - 1, "months" => date("n", $diff) - 1, "days_total" => floor($diff_secs / (3600 * 24)), "days" => date("j", $diff) - 1, "hours_total" => floor($diff_secs / 3600), "hours" => date("G", $diff), "minutes_total" => floor($diff_secs / 60), "minutes" => (int) date("i", $diff), "seconds_total" => $diff_secs, "seconds" => (int) date("s", $diff) ); } 

PEAR Date类提供了查找日期和其他约1000个事物之间差异的各种功能。 文件是在这里…

PHP的问题是它没有明确的DateTime类型。 您可以使用Unix时间戳或内置的DateTime类,但功能相当有限。 我期望应该有一些第三方的类,对日期时间计算有更广泛的支持,但我没有找到它。

使用Unix时间戳进行日期(而不是时间)计算也很棘手。 你不得不放弃时间部分,但只是重置为00:00是不安全的,因为夏令时(DST)。 夏令时的效果是,每年有两天不完全是24小时。 因此,在添加/减少日期时,您最终可能会得到一个与3600 * 24不一致的值。

我建议寻找一些第三方的类,有适当的支持这一切的东西。 日期/时间计算是丑陋的。 :P

Zend框架有Zend_Date类来处理“日期数学”。 它通过使用BCMath扩展来解决系统特定的时间戳限制,或者如果不可用,则会按照系统的最大浮动值限制时间戳。

 // example printing difference in days require('Zend/Date.php'); $date1 = new Zend_Date(); $date1->set(2, Zend_Date::MONTH); $date1->set(27, Zend_Date::DAY); $date1->set(2008, Zend_Date::YEAR); $date2 = new Zend_Date(); $date2->set(3, Zend_Date::MONTH); $date2->set(3, Zend_Date::DAY); $date2->set(2008, Zend_Date::YEAR); echo ($date2->getTimestamp() - $date1->getTimestamp()) / (3600*24); 

我不知道什么被认为是最好的 ,因为在PHP中没有内置函数来做这件事,但有些人使用gregoriantojd() ,例如在这个论坛帖子中 。

gregoriantojd()给出了与使用strtotime()相同的结果,请参阅此博客帖子了解如何执行此操作:

http://www.phpro.org/examples/Calculate-Age-With-PHP.html

以下为我工作。 相信我在php.net文档上找到了它。

*编辑 – Woops,没有看到csl的帖子。 这是他的链接确切的功能,一定是我找到它的地方。 ;)

 //Find the difference between two dates function dateDiff($startDate, $endDate) { // Parse dates for conversion $startArry = date_parse($startDate); $endArry = date_parse($endDate); // Convert dates to Julian Days $start_date = gregoriantojd($startArry["month"], $startArry["day"], $startArry["year"]); $end_date = gregoriantojd($endArry["month"], $endArry["day"], $endArry["year"]); // Return difference return round(($end_date - $start_date), 0); } 

我试图计算两个日期的差异,以显示事件的持续时间。 如果事件的持续时间从星期五晚上17:00到星期天15:00,那么问题的大部分功能就会失败。 我的目标是找到日期之间的差异,如:

 date('Ymd',$end)-date('Tmd',$begining); 

但是,这可能是失败的,因为一年中没有99个月,一个月中也没有99天。 我可以将日期字符串转换为UNIX时间戳,然后除以60 * 60 * 12,但有些日子会有更多或更少的小时数,有时甚至会有一个跳跃的部分。 所以我使用getdate()函数创建了自己的函数,该函数返回关于时间戳的信息数组。

 /* * datediff($first,$last) * $first - unix timestamp or string aksepted by strtotime() * $last - unix timestamp or string aksepted by strtotime() * * return - the difference in days betveen the two dates */ function datediff($first,$last){ $first = is_numeric($first) ? $first : strtotime($first); $last = is_numeric($last ) ? $last : strtotime($last ); if ($last<$first){ // Can't calculate negative difference in dates return -1; } $first = getdate($first); $last = getdate($last ); // find the difference in days since the start of the year $datediff = $last['yday'] - $first['yday']; // if the years do not match add the appropriate number of days. $yearCountedFrom = $first['year']; while($last['year'] != $yearCountedFrom ){ // Take leap years into account if( $yearCountedFrom % 4 == 0 && $yearCountedFrom != 1900 && $yearCountedFrom != 2100 ){ //leap year $datediff += 366; }else{ $datediff += 365; } $yearCountedFrom++; } return $datediff; } 

关于GregorianToJD()函数,它可能有用,但是我感觉有点不安,因为我不明白它是如何工作的。

我们不要过度工作,伙计们。

 $d1 = strtotime($first_date); $d2 = strtotime($second_date); $delta = $d2 - $d1; $num_days = ($delta / 86400); 

使用Php计算两个日期(和时间)之间的差异。 以下页面提供了使用Php执行日期/时间计算的一​​系列不同方法(共7个),以确定两个日期之间的时间差(小时数,天数),天数,月数或年数。

请参阅Php日期时间 – 7种计算两个日期之间差异的方法

PHP 5.2引入了DateTime和DateInterval类,这很容易:

 function get_date_offset($start_date, $end_date) { $start_time = new DateTime($start_date); $end_time = new DateTime($end_date); $interval = $end_time->diff($start_time); return $interval->format('%a days'); }