PHP函数获取日期格式?

时间:2009-12-18 16:38:39

标签: php sql datetime datepicker

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

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

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

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

6 个答案:

答案 0 :(得分:3)

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

$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

答案 1 :(得分:2)

查看strptime()

答案 2 :(得分:1)

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

  

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

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

答案 3 :(得分:0)

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

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

等...

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

也许最好将它们全部保存为unix时间戳,然后根据用户想要查看的内容,您可以非常轻松地格式化它们。