2016-09-28 68 views
0
<?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顯示我的系統當前時間而不是紐約時間,所以它通過考慮我的系統時間顯示剩餘時間。我想顯示美國當前時間,以便我可以輕鬆顯示剩餘時間。預先感謝。如何顯示股市剩餘時間在PHP

+0

閱讀[此](http://stackoverflow.com/questions/38327793/how-can-i-insert-real-time-of-an-event-into-database-using-php-mysqli )我希望它對你有用 –

+0

以上只是一個例子嗎?美國觀察DST,如果您在五月份使用固定的日期,那麼它將會打破半年。 – bcmcfc

+0

該代碼的錯誤超出了您的想象 – RiggsFolly

回答

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