<?php
date_default_timezone_set('America/New_York');
$current_time = time();
$now = new DateTime();
$b = $current_time;
$future_date = new DateTime('2011-05-11 09:30:00');
$interval = $future_date->diff($now);
echo $interval->format("%h hours, %i minutes, %s seconds");
?>
我想显示市场剩余时间,市场开放时间为上午9:30,上面的代码工作正常,但问题是$ current_time显示的是我的系统当前时间而不是Nerw york时间,因此它显示剩余时间通过考虑我的系统时间。我想显示美国当前时间,以便我可以轻松显示剩余时间。提前谢谢。
答案 0 :(得分:1)
我认为这更接近你的需要。
我确保在两个DateTime对象上设置一个特定的时区,这样就不会有混淆
这也考虑了市场可能已经开放的可能性,并告诉你关闭时间有多长。
它也可以在所有情况下使用今日日期,因此应该应对任何夏令时。
当前时间还有一个时间设定器,因此您可以查看当天不同时间发生的情况,请参阅$now->setTime(10, 30, 0);
以设置特定时间。
<?php
$now = new DateTime();
$now->setTimezone(new DateTimeZone('America/New_York'));
// To test what happens at different times of the current day
// Set a specific time for the NOW DateTIme
$now->setTime(10, 30, 0);
echo 'Now = ' . $now->format('d/m/Y H:i:s').PHP_EOL;
$opens = new DateTime();
$opens->setTimezone(new DateTimeZone('America/New_York'));
$opens->setTime(9, 30, 0);
echo 'Opens = ' . $opens->format('d/m/Y H:i:s').PHP_EOL;
$interval = $now->diff($opens);
// if invert == 1 its a minus difference so market is open
if ( $interval->invert == 1){
// Its already open
echo $interval->format("Market has been open for: %h hours, %i minutes, %s seconds").PHP_EOL;
// When will it close
$close = new DateTime();
$close->setTimezone(new DateTimeZone('America/New_York'));
$close->setTime(3, 30, 0);
$interval = $now->diff($close);
echo $interval->format("Market closes in: %h hours, %i minutes, %s seconds").PHP_EOL;
} else {
// it will open in
echo $interval->format("Market opens in: %h hours, %i minutes, %s seconds").PHP_EOL;
}