我在JavaScript中有個約會對象,去如下:正確的客戶端(JavaScript的)和服務器(PHP)之間的格式倍
var date = 2014-12-01T00:00:00.000Z
如果我做的:
var date = new Date(date);
date.setUTCMonth(date.getUTCMonth()+1);
然後toISOString()
方法顯示預期值:
2015-01-01T00:00:00.000Z
但是,當我發送日期時間字符串通過張貼到PHP腳本,並使用該DateTime
類解析回一個日期,我得到這個:
2014-12-31 19:00:00 -0500
我已經嘗試設置使用DateTimeZone
類的時區,並沒有運氣的時區設置爲我自己和UTC:
new DateTime($_POST['DateTime'],new DateTimeZone('America/Mexico_City'));
new DateTime($_POST['DateTime'],new DateTimeZone('UTC'));
有沒有辦法在JavaScript設置時區,使用Date
類?有其他解決方法嗎?所有處理時區的經驗都很小,如果不是零。
更新:
這裏是我的ISO格式的時間字符串作爲每toISOString()
方法(JavaScript的):
2014-09-01T00:00:00.000Z
這裏是我的$_POST
var的內容根據print_r()
:
Array (
[DateTime] => 2014-09-01T00:00:00.000Z
)
這是我的格式化函數的輸出,使用'%c'
格式(es_MX區域):
DOM 31年前2014 19:00:00 CDT
並且所提到的格式化功能:
function formatDate($date) {
return utf8_encode(strftime('%c', $date->getTimestamp()));
}
的問題不在於我得到的Z區的時間,而是-0500時間和我想的Z區的時間。 – arielnmz 2014-09-04 16:31:13
你能指定你從'$ _POST ['DateTime']'得到什麼嗎? – Onema 2014-09-04 17:13:21
另外看看這裏提供的代碼中的輸出:http://3v4l.org/0dTRW。如果你沒有得到一個時區,你應該只使用新的DateTimeZone('UTC')'在CONSTRUCTOR中,而不使用'DateTime :: setTimezone()'方法,因爲你會得到不同的結果,請參閱:http:// 3v4l.org/8Zd1Y。在構造函數中,它只會更改時區,在該方法中它將更改時間(h:m)和時區,以在不同時區中表示對象當前日期 - 時間。請參閱相關問題:http://stackoverflow.com/questions/25658539/php-datetime-timezones-constructor-vs-setter-method – Onema 2014-09-04 17:28:20