php – 将来是时间戳(使用不同的时区格式)吗?

我给出了这样格式化的时间戳:

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'));
点赞