我將我的Android應用程序移植到iOS,並且正處於聊天階段。非常奇怪PHP/MySQL和iOS的日期行爲
每封郵件都有自己的日期,而且我的服務器API(使用PHP)有一個方法可以在日期後取得所有郵件(這樣我就可以發送請求併發送我的lastMessageDate
並獲取任何不在設備上的新郵件隨時需要)
我的數據庫是MySQL,服務器的時區是GMT + 2。 DB將所有日期保存爲GMT + 2,PHP將它們作爲字符串發送回客戶端。
在Android中,在我的測試REST客戶端,調用下面的要求給出了「沒有新信息」的消息,因爲它應該:
在iOS中,因爲操作系統將所有的日期爲UTC,在發送日期之前,我將轉入GMT + 2字符串。我一直在測試和調試這個日期字符串,它確實是在GMT + 2中,因爲我的服務器期望它。 印刷與調試器發送請求之前的post數據,顯示的時間確實是在GMT + 2:
Params: ["since": "2017-03-15 21:16:04", "chat_id": "86", "username": "testuser"]
然而,發送完全相同的要求,在我的REST客戶端,返回聊天消息過去2小時內發佈的內容,例如iOS應用發送UTC日期而不是GMT + 2字符串。
中的iOS模擬器的反應是:
Received data is:
{
"message" : "Messages in this chat:",
"messages" : [
{
"message" : "This is a message",
"chat_id" : "86",
"who" : "1",
"date" : "2017-03-15 21:16:04"
}
],
"error" : false
}
我一直在試圖調試這在過去的4小時,沒有運氣。我不知道這是服務器的故障還是iOS的錯誤,所以如果有人能指出我正確的方向,那將非常感激。謝謝
無處顯示如何使用會導致此問題的日期。 PHP,MySql和Android在哪裏? – AbraCadaver
對不起,不發佈更多的代碼,但我不認爲這是必要的,因爲3個平臺中有2個正在工作。對於iOS請求,我使用的是Alamofire,而我在我的問題中使用的參數是iOS發送到服務器的字典。經過更多調試後,我認爲問題出在PHP中。從iOS發送請求時,它沒有獲取「since」參數。我試圖得到POST參數:'if(filter_has_var(INPUT_POST,'since')){$ since = $ reqData ['since']; }'但是當請求從iOS發送時'$ since'在服務器上爲空。有任何想法嗎? 在PHP中,我使用SLIM框架。 –
'$ reqData是一個由SLIM框架使用'$ reqData = $ req-> getParsedBody();' –