Php日期和时间比较

时间:2012-09-13 13:37:30

标签: php date time

我查看了this问题,但时间格式不同

我有以下日期格式Tue, 11 Sep 2012 17:38:09 GMT$pubDate变量

我想将$pubDate与当前日期和时间进行比较,看看Tue, 11 Sep 2012 17:38:09 GMT是否在过去10分钟内

编辑:

我试过了

//get current time
                strtotime($pubDate);
                time() - strtotime($pubDate);
                if((time()-(60*10)) < strtotime($pubDate)){
                    //if true increase badge by one
                    $badge = $badge + 1;
                }

它发出警告: 依赖系统的时区设置是不安全的。您必需使用date.timezone设置或date_default_timezone_set()函数。如果您使用了这些方法中的任何一种并且仍然收到此警告,则很可能拼错了时区标识符。我们在第26行的/Users/xxxxx/Desktop/xxxx/xxxx/xxxx.php中为'EDT / -4.0 / DST'选择'America / New_York'

编辑:

我已将date_default_timezone_set('America/New_York');行添加到我的php中,现在

$inDate  = DateTime::createFromFormat( $format, $pubDate);
    $postDate = new DateTime();

    $diff = $inDate->diff( $postDate);

    // If the total number of days is > 0, or the number of hours > 0, or the number of minutes > 10, then its an invalid timestamp.
    if( $diff->format( '%a') > 0 || $diff->format( '%h') > 0 || $diff->format( '%i') > 10) {
     die( 'The timestamps differ by more than 10 minutes');
    }

在没有任何警告的情况下工作,谢谢大家

4 个答案:

答案 0 :(得分:2)

使用DateTime进行比较:

$format = 'D, d M Y H:i:s O';
$tz = new DateTimeZone( 'America/New_York');

// Create two date objects from the time strings
$pubDate  = DateTime::createFromFormat( $format, 'Tue, 11 Sep 2012 17:38:09 GMT', $tz);
$postDate = DateTime::createFromFormat( $format, 'Tue, 11 Sep 2012 17:38:09 GMT', $tz);

// Compute the difference between the two timestamps
$diff = $pubDate->diff( $postDate);

// If the total number of days is > 0, or the number of hours > 0, or the number of minutes > 10, then its an invalid timestamp.
if( $diff->format( '%a') > 0 || $diff->format( '%h') > 0 || $diff->format( '%i') > 10) {
    die( 'The timestamps differ by more than 10 minutes');
}

您可以使用它并在this demo中查看它。

答案 1 :(得分:2)

您可以比较两个DateTime对象。

$nowLessTenMinutes = new DateTime();
$nowLessTenMinutes->sub(new DateInterval('PT10M')); // Sub 10 minutes

if ($myTime >= $nowLessTenMinutes);

答案 2 :(得分:1)

使用DateTime::diff()计算差异:

$input = new DateTime( 'Tue, 11 Sep 2012 17:38:09 GMT' );
$now = new DateTime();

/* calculate differences */
$diff = $input->diff( $now );

echo $diff->format( '%H:%I:%S' );

答案 3 :(得分:0)

我有同样的问题,如果你使用MAMP或类似的东西,更改php.ini尝试在你的php文件顶部添加date_default_timezone_set('America/New_York');会很复杂。

然后,此线程上的大多数其他答案都应该有效。