2014-10-11 98 views
0

我有一個需要存儲截止日期的應用程序。因此,如果Bob在英國創建任務並表示將於2月20日到期,那麼無論其他用戶的時區如何,我都希望它在日曆上顯示爲2月20日。什麼是存儲到期日的最佳方式?

把它作爲UTC爲DATETIME在MySQL中提出的問題是,如果Bob創建凌晨1點的任務2月20日,然後簡在加利福尼亞州將看到的,由於月19

任務

所以我的其他想法是存儲它作爲DATE,但我找不到有關DATE如何受時區影響的任何文獻。

所以我的問題是,如果我的應用程序是PHP和我的存儲是MYSQL,並且我想實現僅存儲日期而不是日期/時間的日曆,並且我希望事件顯示爲全局某個日期,我應該怎麼去關於它?除了我的特殊需求,我還對其他人如何實現日期特定事件感到好奇(你是否讓日期在不同的用戶日曆上有所不同?) - 例如,Google日曆/ Outlook如何處理「全部日事件「?

+0

澄清;你希望每個人,無論他們的時區,看到他們的任務是在20日在他們自己的時區,而不是在創建任務的人的時區?一個例子的用法可能是填寫一份調查問卷,要求簡在半夜完成這個調查並且每個人都可以做到這一點並不重要,這是一個24小時的窗口。 – Ben 2014-10-11 11:29:37

+0

是的,我希望每個人不管他們的時區在10月13日星期一在他們的日曆上發生什麼事情。 – user1941747 2014-10-11 11:46:37

回答

0

最安全的方法是存儲作業創建者的unix時間戳和時區。然後,在顯示其他用戶的日期時,使用該時區顯示時間:

$timestamp=1413027859; 
$timezone='Australia/Sydney'; 
$dt=new DateTime(); 
$dt->setTimestamp($timestamp); 
$dt->setTimezone(new DateTimeZone($timezone)); 
$day=$dt->format('Y-m-d'); 
+0

所以你會在MySQL中使用兩列來存儲數據?一個DATETIME/TIMESTAMP和一個「用戶時區」VARCHAR(?) – user1941747 2014-10-11 11:49:34

+0

就個人而言,我從不在數據庫中使用DATETIME類型,因爲它們看起來並不像我期望的那樣工作,並且對於每種SQL類型(有時是細微的) 。所以,如果時區不相關,我只是存儲unix時間戳(例如,某個事件發生的時間)。如果時區是相關的,我將它存儲在時間戳旁邊的單獨字段中,或間接存儲它,例如。通過具有存儲該人員時區的人員表的外鍵。 – 2014-10-11 11:59:27

2

您可以將日期存儲爲日期字段。由於您希望所有用戶都能看到相同的日期,因此無需擔心時區等問題。即在列中存儲2014-10-11,然後向用戶顯示該值。

相關問題