存储截止日期的最佳方式是什么?

时间:2014-10-11 11:24:35

标签: php mysql date datetime timezone-offset

我有一个需要存储截止日期的应用程序。因此,如果英国的Bob在2月20日创建了一个任务并说它应该到期,我希望它在日历上显示为2月20日,而不管其他用户的时区。

在MySQL中将其作为UTC存储为DATETIME会出现问题,如果Bob在2月20日凌晨1点创建任务,那么Jane在加利福尼亚州会将该任务视为截止日期为2月19日。

所以我的另一个想法是将其存储为DATE,但我无法找到有关DATE如何受到TimeZone影响的任何文献。

所以我的问题是,如果我的应用程序是PHP并且我的存储是MYSQL并且我想实现仅存储日期而不是日期/时间的日历,并且我希望事件在全局显示为特定日期,我该怎么办?它?

除了我的特殊需求之外,我还对其他人如何实施日期特定事件感到好奇(您是否只是让不同用户日历的日期不同?) - 例如Google Calendar / Outlook如何处理& #34;全天活动"?

2 个答案:

答案 0 :(得分:2)

您只需将日期存储为DATE字段即可。由于您希望所有用户看到相同的日期,因此无需担心时区等。即将2014-10-11存储在列中,然后向用户显示该值。

答案 1 :(得分:0)

最安全的方法是存储unix时间戳和作业创建者的时区。然后,在显示其他用户的日期时,使用该时区显示时间:

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