【问题标题】:PHP datetime from string来自字符串的 PHP 日期时间
【发布时间】:2012-12-17 07:59:57
【问题描述】:

在花了 6 个多小时尝试这样做并尝试了许多不同的已发布解决方案之后,我只想问确切的问题。

我想让用户以 html 形式输入美国格式的日期和时间。今天的格式是12/16/2012 02:53,使用 24 小时时间格式。

我们称之为 start_date。

然后我想将包含 start_date 的记录插入到 mysql 数据库中的 datetime 类型字段中。 我正在使用 PHP 5.2。我看到的许多解决方案都需要 5.3,而 5.2 的解决方法都不起作用。

谁能给我一个确切的例子。 谢谢。

【问题讨论】:

  • 为什么不升级到最新的 php 有很多问题可以解决?
  • 我正在使用 hostgator。他们确实提供了一种升级方法。我也在使用 3rd 方 php 软件,其中一些是用 ioncube 编码的,我担心任何破坏。我认为如果没有问题,那么 hostgator 就会自己切换它。我没有足够的经验知道它可能会产生什么影响。

标签: php mysql datetime


【解决方案1】:
  1. 使用正则表达式或字符串处理从当前格式中提取字段。
  2. 以 MySQL 格式创建日期。
  3. 插入数据库。

请看这里:date_create_from_format equivalent for PHP 5.2 (or lower)

【讨论】:

  • 谢谢,但我已经尝试了所有这些,但没有一个适用于我的日期格式,define date_create_from_format 函数返回的内容不长,或者至少试图用 date("m/ d/Y H:i", $timestamp) 在写入mysql之前报错参数不长。
【解决方案2】:

实际上,您的日期格式无效,无法插入到 mysql 表中,格式必须为 YYYY-mm-dd Hour:min:sec,以便放置在 datetime 字段中。但是如果你使用字段类型作为 varchar 你不需要关心格式。你可以插入任何你想要的格式。

【讨论】:

    【解决方案3】:

    或者你可以依赖 MySQL 解析:

    SELECT STR_TO_DATE('12/16/2012 02:53', '%m/%d/%Y %H:%i')
    

    注意:这需要两位数的月、日和小时,即 01 - 而不是 1。 其他格式见MySQL Date format

    此外,为了使这种方法实用,您必须处理失败的解析尝试:例如,您可以将 Datetime 列设为 NOT NULL,这样如果您尝试将 NULL 写入其中,所有插入或更新都会失败(STR_TO_DATE 将返回 NULL 无效日期)

    【讨论】:

      【解决方案4】:

      你要了一个例子,还没有人提供,所以这里是:-

      $start_date = date("Y-m-d H:i:s", strtotime("12/16/2012 02:53"));
      echo $start_date;
      

      输出:-

      2012-12-16 02:53:00
      

      此格式与MySql DateTime type 匹配。

      See working example here 这也表明它可以在 PHP 5.2 中工作。

      请参阅strtotimedate 的手册。

      【讨论】:

        【解决方案5】:

        您可以使用strtotime()。它根据格式解析日期。例如,使用 / (MM/DD/YYYY) 的日期使用美国格式解析,使用 -. (DD-MM-YYYY 或 DD.MM.YYYY) 的日期使用欧洲格式解析. See the third note 在文档中。

        如果可能的话,您真的应该考虑升级到 5.4。在那里你可以使用非常好的date classes

        【讨论】:

        • strtotime 在我的字符串上存储日期,但是当从表中检索到它时,它会出现 01/01/1900 00:00:00 或类似的东西。
        • strtotime() 为您提供 UNIX 时间戳(这是一个大整数值)。为了将它与 MySQL 一起使用,您需要使用 date() 函数:$mySqlDateTime = date('Y-m-d H:i:s', strtotime('12/16/2012 02:53'));
        猜你喜欢
        • 2021-02-04
        • 2022-11-23
        • 2014-02-21
        • 2023-03-27
        • 2013-10-10
        • 1970-01-01
        • 1970-01-01
        • 2023-01-13
        • 1970-01-01
        相关资源
        最近更新 更多