【问题标题】:How do I properly handle timestamps using CakePHP?如何使用 CakePHP 正确处理时间戳?
【发布时间】:2012-07-16 18:17:06
【问题描述】:

请随意只回答部分问题,无论您有什么答案。

使用新的 2.2 版 cake 更好地支持时区,这是完美的时机,因为我正在开发一个非常“时间敏感”的应用程序。尽管尽我所能,但我根本无法让一切正常工作。所以这是我的问题:

是否应将日期时间条目(认为创建/修改)存储在 UTC 中?如果是这样,确保蛋糕使用 UTC 的最有效方法是什么?

时间戳(精确的时刻)应该存储为 int 还是 mysql 中的时间戳?

使用新蛋糕,我如何自动将 UTC int/timestamps 转换为默认站点时区?用户时区(存储在他们的用户元组中)?

如果日期时间(创建/修改)时间存储为 UTC,如何使用 cake 将它们转换为默认站点时区?用户时区?

谢谢!

【问题讨论】:

    标签: cakephp datetime timezone timestamp cakephp-2.0


    【解决方案1】:
    1. 如果您想为您的站点用户自定义时间设置,那么您应该使用全局时间设置,即 UTC 格式。以 UTC 格式保存到数据库中。在您的 app/Config/core.php 中,您将找到以下行。

      date_default_timezone_set('UTC');  // at line 232
      

      因此您可以确认 cake 将使用 UTC 时间格式,同时将时间保存到数据库中。

    2. 以下项目总结了 MySQL 4.1.2 之前的 TIMESTAMP 初始化和更新属性:

      如果该列设置为 NULL 或根本未指定,则表行中的第一个 TIMESTAMP 列会在创建记录时自动设置为当前时间戳。

      当行中任何其他列的值发生更改时,表行中的第一个 TIMESTAMP 列会自动更新为当前时间戳,除非 TIMESTAMP 列显式分配了除 NULL 以外的值。

      如果在创建表时为第一个 TIMESTAMP 列指定了 DEFAULT 值,它会被静默忽略。

      表中的其他 TIMESTAMP 列可以通过为它们分配 NULL 来设置为当前 TIMESTAMP,但它们不会自动更新。

    我认为,如果您不想自动更改时间戳,最好将时间戳保存在整数字段中。

    【讨论】:

    • 感谢您的回复,这肯定会缩小一些问题。我确实发现避免 TIMESTAMP 的自动功能真的很容易(允许该字段为空),但我同意这种自动行为使事情复杂化......而且似乎真的没有经过深思熟虑。一个明确的考虑。至于第一部分,这对那部分有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-04-21
    • 2012-09-09
    • 2023-03-14
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    相关资源
    最近更新 更多