我在PHP中有一個DateTime對象。那就是:轉換時區產生相同的時間戳
$base = new DateTime('2013-10-21 09:00', new DateTimeZone('America/New_York'));
當我打電話$base->getTimestamp()
,我得到的,符合市場預期:1382360400
。
在我的項目,我使用moment.js,當我告訴眼前這個時間戳是「本地時間」,它工作正常:
// Correct :)
moment.unix(1382360400).local().format('LLLL') // Monday, October 21 2013 9:00 AM
的問題是,在我的應用程序的所有其他日期都在UTC(除了這一個),所以在我的JavaScript代碼,我有這個:
var theDate = moment.unix(timestamp).utc();
對於所有其他日期,這個工程,但不是這一個。 1382360400
處於「當地時間」,而不是UTC。我想通過電話setTimezone
會修復,所以我做了$base->setTimezone(new DateTimeZone('UTC'));
。
調用var_dump($base)
返回我:
object(DateTime)#1 (3) {
["date"]=>
string(19) "2013-10-21 13:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
這看起來是正確的,但是當我做$base->getTimestamp()
,我再次得到1382360400
!那是不對的!我顯然沒有得到正確的日期。
// Incorrect :(
moment.unix(1382360400).utc().format('LLLL') // Monday, October 21 2013 1:00 PM
我怎樣才能PHP的DateTime
返回我的時間戳UTC?我期望從$base->getTimestamp()
得到1382346000
,這是我所得到的,當我做:
$UTC = new DateTime('2013-10-21 09:00', new DateTimeZone('UTC'));
echo $UTC->getTimestamp();
那麼,如何將我的DateTime
對象轉換爲UTC,並得到我想要的時間戳?
// Correct :)
moment.unix(1382346000).utc().format('LLLL') // Monday, October 21 2013 9:00 AM
(PHP演示:https://eval.in/56348)
我想弄清楚如何「轉換」時間戳。我需要一個解決方案,或至少一個解決方法。 –
您可以使用'DateTimeZone :: getOffset()'計算兩個時區的時區偏移量,從另一箇中減去一個,並將結果添加到時間戳中。 – morgoth84
謝謝! '$ base-> getTimestamp()+ $ local_tz-> getOffset($ base);'返回給我'1382346000' :-D DEMO:https://eval.in/56365 –