2010-10-18 108 views
1

如何使用PHP从较新的日期中减去旧日期2010-10-18 07:44:53PHP - 如何从较新的日期减去较旧的日期?

+0

可能重复的[如何计算日期之间的差异使用php](http://stackoverflow.com/questions/676824/how-to-calculate-the-date-difference-between-2-dates-使用-php) – Gordon 2010-10-19 08:43:18

回答

0

date_diff

http://php.net/manual/en/function.date-diff.php

如果您正在使用datetime对象的方法为DIFF

+0

PHP> = 5.3.0只有 – Spilarix 2010-10-18 15:52:20

+0

有没有另一种方式? – HELP 2010-10-18 15:53:59

+0

有关替代方法,请参考此问题的答案:http://stackoverflow.com/questions/676824/how-to-calculate-the-date-difference-between-2-dates-using-php – doppelgreener 2010-10-18 15:54:17

1

我会建议使用时间戳工作。从另一个减去一个,差异是秒,然后简单的逻辑将其转换为分钟/小时/天等。

可以使用 datestrtotimemktime获得时间戳

0

接听样的问题取决于你想要什么样的返回值。秒?分钟?这里有一个简单的功能,你可以尝试在任何你想要的形式来获取值:

<?php 
define('SUBDATES_SECS', 0); 
define('SUBDATES_MINS', 1); 
define('SUBDATES_HOURS', 2); 
define('SUBDATES_DAYS', 3); 
define('SUBDATES_WEEKS', 4); 
define('SUBDATES_MONTHS', 5); 
define('SUBDATES_YEARS', 6); 
function sub_dates($older, $newer, $ret = SUBDATES_SECS) { 
    $older = (is_numeric($older)) ? $older : strtotime($older); 
    $newer = (is_numeric($newer)) ? $newer : strtotime($newer); 

    $result = $newer - $older; 
    switch($ret) { 
     case SUBDATES_MINS: 
      $result /= 60; 
      break; 
     case SUBDATES_HOURS: 
      $result /= 120; 
      break; 
     case SUBDATES_DAYS: 
      $result /= 86400; 
      break; 
     case SUBDATES_WEEKS: 
      $result /= 604800 ; 
      break; 
     case SUBDATES_MONTHS: 
      $result /= 2629743; 
      break; 
     case SUBDATES_YEARS: 
      $result /= 31556926; 
      break; 
    } 

    return $result; 
} 

使用它:

<?php 
$older = time(); 
sleep(3); 
$newer = time(); 
echo sub_dates($older, $newer); 
// Returns 3 

echo sub_dates($older, $newer, SUBDATES_MINS); 
// Returns 0.05 

echo sub_dates('2010-04-19 01:01:00', '2010-04-19 01:02:00', SUBDATES_MINS); 
// Returns 1 

这是相当未经测试,但!