[英]Timestamp comparison in MySQL and PHP ( UTC, +0000, Timezones )
我正在嘗試確定在JSON Twitter提要中給出的表示日期和時間的字符串是否在MySQL的時間戳列范圍內。
這是示例字符串:
'Sat, 31 Oct 2009 23:48:37 +0000',
根據API ( created_at
)的+0000
表示它確實是UTC
。 現在,我正在使用strtotime
和date
來確認時間。 附:
$t = 'Sat, 31 Oct 2009 23:48:37 +0000';
$timestamp = strtotime($t);
echo date('M d Y H:m:s', $timestamp);
我得到Oct 31 2009 19:10:37
。 如果我刪除+0000
我Oct 31 2009 23:10:37
。 所以+0000
和沒有它之間的區別是4小時。 我猜是因為我當地的時區(馬里蘭州,美國= America/New_York
),顯然不同於UTC。
我不確定在嘗試確定此時間戳是否在我的數據庫中存儲的兩個時間戳的范圍內時,是否應該剝離+0000
或使用它,這是2009-10-30 23:16:38
2009-11-25 12:00:00
我現在感到愚蠢和有點困惑,當我填寫這些時間戳時,YYYY-MM-DD H:M:S來自Javascript日期時間選擇器,示例格式是10/31/2009 11:40 am
我使用STR_TO_DATE像這樣:
STR_TO_DATE("10/31/2009 11:40 am", "%m/%d/%Y %l:%i %p")'),
我應該離開+0000
還是+0000
它? 精神上輕拍
如果您還正確設置了服務器時區 ,您當然應該保留時區信息。 否則,重要的是,你所有的時間比較將是4小時。 :O)
要比較你應該把它作為UNIX時間戳的時間,即strtotime
的結果。
$twitterTS = strtotime('Sat, 31 Oct 2009 23:48:37 +0000');
$localStartTS = strtotime('Sat, 31 Oct 2009 19:00:00'); // timezone is -0400 implicitly
$localEndTS = strtotime('Sat, 31 Oct 2009 20:00:00');
if ($localStartTS <= $twitterTS && $twitterTS <= $localEndTS) {
// twitter timestamp is within range
}
澄清一下:在比較不同時區的時間之前,請確保它們全部轉換為相同的時區。 比較倫敦時間20:00到紐約時間20:00沒有時區信息將產生不正確的結果。 strtotime
會將所有時間轉換為您當地的時區; 如果輸入中存在時區信息,它將尊重它並適當地轉換時間,否則它將假設時間已經本地化。 如果數據庫中的所有時間都是本地的,那么絕對應該確保本地化要與它們進行比較的所有時間戳。
另一種策略是在存儲或比較它們之前始終將所有時間轉換為UTC。
接受你的選擇,一直這樣做。
在PHP中,您可以簡單地使用substring函數將json twitter時間細分為其組件
//'Sat, 31 Oct 2009 23:48:37 +0000'
$hour = substring($jsontime,18,2);
$minute = substring($jsontime,22,2);
...
$phpDatetime mktime($hour,$minute,$second,$month,$day,$year);
從那里我認為你已經擁有它。 不要忘記調整GMT差異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.