【问题标题】:PHP function to get the date format?PHP函数获取日期格式?
【发布时间】:2010-12-28 02:40:37
【问题描述】:

我知道如何使用日期格式字符串,将date('Y/m/d H:i:s'); 转换为2009/12/18 11:37:45

我想要一个可以做相反的函数 - 查看格式化的日期然后返回格式。 PHP里有吗?

原因是我们的数据库中保存了各种格式的时间戳,我正在编写一个工具来处理我们所有的旧表并分析日期条目。

编辑:所以我想没有直接的方法可以做到这一点。我在想我可以使用 strftime(),它以秒为单位返回自纪元以来的时间。所以一个更好的问题是我可以在 mySQL 数据库的时间戳字段中使用该时间(以秒为单位)吗?我猜如果表的结构是时间戳而不是 varchar(有时是这样),这将起作用。

【问题讨论】:

  • 您可能会遇到像 2009/10/07 这样的日期的本地化问题。是 Y/m/d 还是 Y/d/m?

标签: php sql datetime datepicker


【解决方案1】:

不,没有这样的功能。您需要编写一组正则表达式匹配来表达所有可能的变化,例如

$variations = array (
    '^([0-9]{4})/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{4}2$' => 'Y/m/d H:i:s',
    // more here
);

foreach ($dateFromDatabase as $date) {
    foreach ($variations as $regexp => $dateFormat) {
        if (preg_match ('|' . $regexp . '|', $date)) {
            $matches[$dateFromDatabase] = $dateFormat;
            break;
        }
    }
}

// $matches now consists of an array of dates => format

【讨论】:

  • 这比我的回答要好,因为您将所有定义放在一个数组中,而不是一堆代码。
【解决方案2】:

是的,确实存在这样的功能:strtotime()

strtotime — 将任何英文文本日期时间描述解析为 Unix 时间戳

编辑:好的,该函数可能不会返回使用的格式,但您将获得时间戳,然后您可以以任何格式存储它。

【讨论】:

    【解决方案3】:

    看看strptime()

    【讨论】:

      【解决方案4】:

      您可以使用正则表达式来识别特定的日期格式。您可以添加到您的正则表达式列表,直到您有 100% 的覆盖率。

      if(preg_match('/^\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}$/', $Date))
          $Format = 'Y/m/d H:i:s';
      

      等等……

      【讨论】:

        【解决方案5】:

        您不需要将日期转换为 m/d/Y 格式。您可以使用 strtotime 将任何有效日期转换为您想要的任何其他日期格式。

        date( 'format', strtotime($date) );
        

        【讨论】:

          【解决方案6】:

          也许将它们全部保存为 unix 时间戳是一个更好的主意,然后您可以根据用户想要看到的内容非常轻松地对其进行格式化。

          【讨论】:

            猜你喜欢
            • 2013-10-16
            • 1970-01-01
            • 2016-02-24
            • 2010-12-23
            • 1970-01-01
            • 2019-12-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多