如何在php中显示股市剩余时间

时间:2016-09-28 08:54:00

标签: php

<?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时间,因此它显示剩余时间通过考虑我的系统时间。我想显示美国当前时间,以便我可以轻松显示剩余时间。提前谢谢。

1 个答案:

答案 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;
}