我使用Postgres的下面的SQL查詢:傳球trunc_date Postgres的時間戳PHP的日期會導致錯誤的日期
SELECT
date_trunc('month', s.thedate),
r.rank,
COUNT(r.rank)
FROM
serps s
LEFT JOIN ranks r ON r.serpid = s.serpid
GROUP BY
date_trunc('month', s.thedate), s.thedate, r.rank
ORDER BY
s.thedate ASC;
,當我直接運行該查詢對數據庫,我得到的數據中的所有數據我需要和日期似乎是正確的(格式化在Y-m-d g:i:s
)。
但是,當我使用PHP運行它時,Postgres而不是日期返回時間戳。
因此,當我在PHP date
中使用該時間戳時,整個日期不正確。
例如:
第一行的Postgres顯示爲:
"2013-08-01 00:00:00, 36, 1"
但PHP接收:
"1375315200000, 36, 1"
當我嘗試這樣做:
echo date("Y-m-d", 1375315200000);
輸出是:的
2013-08-01
45552-01-02
,而不是起初我還以爲這是一個填充問題,也許?我放棄了3個零的時間戳這樣:
echo date("Y-m-d", 1375315200);
和回報:
2013-07-31
我的問題是:
1)是否只是一種巧合,經過下降三個零,時間戳代表存儲在數據庫中的實際日期前一天?
2)爲什麼Postgres正確解釋時間戳;而PHP不?根據文檔Postgres時間戳應該是unix時間戳格式。
我懷疑有時區轉換的東西讓你在這裏。你的服務器上有'TimeZone'設置爲'UTC'嗎?您的服務器時區是否更改?問題中的字段是'timestamp'還是'timestamp with time-zone'類型? –
我認爲這可能是問題所在。數據庫在亞馬遜,我懷疑時區是西雅圖的時區,而Web服務器在亞特蘭大。但爲什麼我必須從時間戳中刪除3個零才能使任何東西關閉?是因爲postgres時間戳是在幾毫秒?我認爲它和unix時間戳一樣。 – ILikeTacos
當postgres發送'2013-08-01 00:00:00'時,這就是php收到的。如果你認爲php收到'1375315200000',請用一些代碼演示它,理想情況下是一個可重複的測試用例。 –