2011-10-05 18 views
0

我知道这已经有一千多次不同的问题,但我还没有找到大多数人倾向于认同的答案。似乎每个人都有自己的(通常完全不同的)如何在MySQL中存储日期的想法。用于计划和计时卡系统的最佳php/mysql日期格式?

对于计划&计时卡系统,什么是最好的方式来存储日期&次?日期&时间范围将必须计算,诸如“总工作时间”在一天/周/等等的东西将不得不被计算等。

请记住,人们可能会从不同的时区计时,所以时间必须恰当地抵消以在当地时间显示。我不能只输出“一刀切”的时间戳。

那么,说了这么多,大家对此有何看法呢?

+0

当用户输入一个值时,用户必须清楚他/她输入的值。例如,如果我住在班加罗尔,并在东部标准时间输入我的工作时间,只要显然我输入的时间是在东部时间,那就是正确的。创建用户配置文件,然后指定他们的时区。将其显示在输入栏旁边,以便他们在输入数值时知道。为了舒适,可以轻松地更改时区的时区。 – hakre

+0

我确实有一个计划使用的时区偏移字段,我只是没有开始构建所有的东西,直到我确定要使用什么时间格式。 – Oseer

+0

在数据库中,您始终使用UTC。用户输入自然形式,如当前时区。你只需要知道用户当前的时区是什么。也就是说,你的appplication需要知道如何处理输入。当你在PHP中编写代码时,如果你真的想了解这一点,我可以建议你[Derick Rethans的书:“PHP |架构师的日期和时间编程指南”](http://derickrethans.nl/phparchitects- guide-to-date-and-time-programming.html),我想他在他的网站上也有一些关于这个话题的演讲幻灯片,你可以直接下载。 – hakre

回答

3

使用时间戳记/日期时间字段并以UTC时间存储该值。转换为本地时区输出给用户。

这样,您可以很容易地在时钟输入/输出时间内进行数学计算,并且在尝试在时区之间进行转换时不会有太大的混乱。

+0

我设置了一个mysql字段来自动插入当前时间戳。当插入新行时,它会保存日期,如2011-10-05 19:00:33。我以为这会插入自1970年以来的秒数。 – Oseer

+0

datetime/timestamp都使用您列出的格式。有了时间戳,你需要注意mysql可能会为你做的任何TZ转换。 http://dev.mysql.com/doc/refman/5.0/en/timestamp.html – jasonbar

+0

我试图刚刚输入自1970年1月1日以来的秒数,我可以在PHP中进行计算,但它输入了格式化的本地时区时间戳..? – Oseer