【问题标题】:Best practice to manage date and days管理日期和日期的最佳实践
【发布时间】:2015-04-08 12:06:40
【问题描述】:

我正在处理一个需要管理许多操作的项目。 每个操作都有一个结束日期,并且由一定数量的任务组成。

如果在[end date] - X days 之前没有完成任务,我想显示提醒(屏幕上显示的文本)。

所有数据都存储在 MySQL 数据库中,我使用 PHPHTML5

  • 哪种数据类型 (are) 最适合使用日期和日期 (to 进行计算)?
  • 我可以使用 Date() 并以简单的方式减去天数吗?

我没有具体的技术问题,但我认为分享最好的方法是一件好事,对吧?

我很想知道进行和接受任何提案的最佳方式是什么!

【问题讨论】:

  • 研究timestampdatetime 列类型。此外,谷歌 php Carbon - 这是一个使用 PHP 的 DateTime 的库。最终结果是您有几行代码可以完全按照您的要求执行。
  • DATETIME 应该在 MySQL 中使用,new \DateTime() 在 PHP 中。 MySQL 允许您使用 TIMESTAMPDIFF() 函数,而 PHP 有 \DateInterval(),组合可以满足您的一切需求。

标签: php mysql sql date date-manipulation


【解决方案1】:

我建议将您的日期存储在 mysql 的字段 timestamp 中,因为您可以使用默认值 CURRENT_TIMESTAMP - 它非常有用, 我认为你不应该担心它,有很多功能::

mysql:

select now();
+---------------------+
| now()               |
+---------------------+
| 2015-04-08 12:13:18 |
+---------------------+
select now() - interval 1 day;
+------------------------+
| now() - interval 1 day |
+------------------------+
| 2015-04-07 12:13:29    |
+------------------------+
select now() - interval 7 day;
+------------------------+
| now() - interval 7 day |
+------------------------+
| 2015-04-01 12:13:38    |
+------------------------+
select now() - interval 1 month;
+--------------------------+
| now() - interval 1 month |
+--------------------------+
| 2015-03-08 12:13:58      |
+--------------------------+

php:

<?php
var_export([
    date('Y-m-d H:i:s', strtotime('now')),
    date('Y-m-d H:i:s', strtotime('- 1 day')),
    date('Y-m-d H:i:s', strtotime('- 7 day')),
    date('Y-m-d H:i:s', strtotime('- 1 month')),
]);
/*
Result:

array (
  0 => '2015-04-08 15:15:42',
  1 => '2015-04-07 15:15:42',
  2 => '2015-04-01 15:15:42',
  3 => '2015-03-08 15:15:42',
)
*/

有时对创建表格很有帮助:

CREATE TABLE t1 (
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

结果您的字段 ts 将被自动设置和更新...

【讨论】:

    【解决方案2】:

    您可以在数据库中将日期存储为DATETIME

    然后在 PHP 中使用 strtotime()date() 函数将其转换为可管理的数据

    【讨论】:

      【解决方案3】:

      使用的最佳数据类型是DateTime 类。

      要使用 DateTime 类执行减法运算,您需要使用 DateInterval 类。

      您将需要一些时间来轻松使用这两个类,但它会使格式化或日期操作在之后变得更容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-20
        • 2011-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多