【问题标题】:Timestamp Best Practices - PHP, MySQL [duplicate]时间戳最佳实践 - PHP,MySQL [重复]
【发布时间】:2014-03-24 14:24:47
【问题描述】:

我已经四处搜索,但没有找到我的问题的具体答案..

我想知道存储时间戳信息的最佳做法。

示例: user1 在美国东部标准时间下午 3:00 登录佛罗里达州 (-0500) 管理员一小时后从加利福尼亚 (-0800) 下午 4:00 登录系统

我希望管理员在屏幕上看到登录并看到 user1 在 1 小时前登录..

我的大脑快疯了,因为我觉得我把这件事复杂化了..

我应该可以使用 UNIX 时间戳,然后使用 -0800 或 -0300 进行调整。

我是否将用户的时区偏移存储在他们的个人资料信息中? 我是否将 -0300 与日志条目一起存储。

任何意见将不胜感激!

【问题讨论】:

    标签: php mysql unix timestamp


    【解决方案1】:

    您混淆了客户端时区和服务器时区。

    只要您不关心用户坐在哪里,只要您不更改服务器时区,就绝对没有问题。您可以在 MySQL 和 PHP 中设置默认时区,并将使用该时区,与访问者的时区无关。

    如果您想尊重访问者的时区,情况会稍微复杂一些。您需要将时间戳从一个时区转换为另一个时区。如果您想使用 PHP 实现此目的,您可以在 PHP manual 中找到相关信息。如果您对 MySQL 如何在内部存储日期(TIMESTAMP 和 DATETIME 类型之间的差异)感兴趣,可以阅读this SO thread,这为使用 mysql 的某些功能提供了可能性,并且您在实施全局项目时绝对应该考虑到这些功能.

    【讨论】:

    • 所以你的意思是我应该根据服务器时区将时间戳存储在数据库中。然后我存储用户时区offest,当向登录用户展示所有时间时,我使用他们的offest?
    • 是的,这将是一种可能性,也可能是最好的方法。
    • 另一种选择是将UTC保存在数据库中,但这需要更多的计划和思考。您也可以考虑一下这个解决方案,然后决定更适合您需求的解决方案。
    • 在对可扩展性进行了一些思考之后,我应该将所有时间都基于 UTC,所以无论将来服务器配置和位置发生什么情况,时间都将始终参考相同基准时间。谢谢!
    • 你可能也想读这个:stackoverflow.com/questions/19023978/…
    【解决方案2】:

    您可以将时间戳存储为INTEGER 数据类型。

    然后,您可以在客户端使用JS来获取用户的时区。

    【讨论】:

    • 可以,但不应将时间戳作为整数保存在提供专用日期时间列类型的数据库中。
    【解决方案3】:

    时区可以在 PHP 中动态配置,因此您不需要在数据库中存储时间偏移量。存储 unix 时间戳是一个很好的解决方案。

    【讨论】:

    • 在提供专用日期时间类型的数据库中存储 unix 时间戳是一个糟糕的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2013-05-17
    • 1970-01-01
    相关资源
    最近更新 更多