在我的 「工具箱」 我使用這個功能:PHP:(!時間戳Y2038錯誤認識)管理的DateTime正道
function dataAttuale() {
$now = new DateTime();
$dataAttuale = $now->format(DateTime::ISO8601);
$offset = $now->getOffset();
date_default_timezone_set('UTC');
$nowUTC = new DateTime();
$dataUTC = $nowUTC->format(DateTime::ISO8601);
$orario = array();
$orario['dataAttuale'] = $dataAttuale;
$orario['dataUTC'] = $dataUTC;
$orario['offset'] = $offset;
return $orario;
}
我得到這個數組
Array
(
[dataAttuale] => 2013-10-18T11:03:52+0200
[dataUTC] => 2013-10-18T09:03:52+0000
[offset] => 7200
)
所以我可以在日期時間MySql字段中保存一個日期時間,稱爲UTC。
現在,我對此有些麻煩。
1)我會保存也抵消(以秒爲單位)。 什麼是最好的Mysql字段?我認爲最大秒數可以是+ 14小時* 60 * 60 = 50400和-12小時* 60 * 60 = -43200
2)您認爲值得注意的還有抵消嗎?即,例如,多個API服務以UTC +偏移量返回日期...
非常感謝!
更新:
謝謝你們兩個人。現在我以UTC格式和varchar時區保存在MySQL日期時間中。一對夫婦的代碼,我得到了我想要的:
$orario = new DateTime($value['creazione'], new DateTimeZone($value['timezone']));
$orario = $orario->format(DateTime::ISO8601);
輸出是(歐洲/羅馬)
2013-10-19T09:27:54+0200
而對於美國/蒙特利爾
2013-10-19T09:29:16-0400
而對於澳大利亞/墨爾本
2013-10-19T09:30:31+1100
(差異分鐘//秒,在我的PHP腳本中更改默認時區)。
現在我認爲:
1)我可以笑一下Y2038錯誤,放棄(:(嘆氣)日期和時間:(
2)我可以放心地周遊世界,用我自己的日曆( naaaa ......我會永遠使用谷歌日曆,當然)
如果我發送一個INSERT查詢到MySQL與UTC日期,我也需要先用SET TIME_ZONE =「+00:00」,還是因爲我的日期是在尚未UTC我並不需要它? – sineverba
@sineverba這取決於你的MySQL設置(通常系統設置正在使用,但你不能依賴它)。就我個人而言,我總是爲每個MySQL連接設置'charset'和'time_zone'來與我使用的'charset'和'time_zone'連接。這樣我就不必擔心如果_correct_ one被設置爲配置文件。 –
我爲每個連接設置charset爲UTF8。從現在開始,我還會設置timezone ='+00:00'。謝謝! – sineverba