我给出了这样格式化的时间戳:
Mon Jul 28 11:39:29 GMT-05:00 2014 Mon Jul 28 13:39:29 GMT+02:00 2014 Thu Jul 17 00:02:02 UTC 2014 Fri Jul 18 14:47:01 UTC 2014
我需要添加X分钟,如果结果是将来返回true / false.技巧是时间戳可以在任何时区,时区可以表示为UTC或GMT(参见上面的例子).
这是我到目前为止编写的代码,但我不知道如何继续:
function isFuture($dateTimeStr, $minToAdd) {
$date1 = DateTime::createFromFormat("D M d H:i:s P Y", $dateTimeStr);
// Something like $date1->date_interval_create_from_date_string('30 minutes);
$date1->add(date_interval_create_from_date_string($minToAdd . ' minutes'));
$now = new DateTime("now");
return $date1 > $now;
}
echo isFuture("Mon Jul 28 14:39:29 GMT-05:00 2014", 30) ? "Future" : "Past";
echo isFuture("Fri Jul 18 14:47:01 UTC 2014", 30) ? "Future" : "Past";
回答我自己的问题:
function isFuture($dateTimeStr, $minToAdd) {
$t = strtotime($dateTimeStr) + ($minToAdd*60);
return $t > time();
}
最佳答案 只需使用
DateTime::getTimezone()
获取$date1的工作时区,并将其用于$now DateTime对象:
function isFuture($dateTimeStr, $minToAdd) {
$date1 = DateTime::createFromFormat("D M d H:i:s P Y", $dateTimeStr);
// Something like $date1->date_interval_create_from_date_string('30 minutes);
$date1->add(date_interval_create_from_date_string($minToAdd . ' minutes'));
$now = new DateTime("now", new DateTimeZone($date1->getTimezone()));
return $date1 > $now;
}
这将适用于任何时区.但如果时区始终是GMT / UTC,您可以将其硬编码到您的函数中:
$now = new DateTime("now", new DateTimeZone('GMT'));