PHP函数获取日期格式?

Posted

技术标签:

【中文标题】PHP函数获取日期格式?【英文标题】:PHP function to get the date format? 【发布时间】: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? 【参考方案1】:

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

$variations = array (
    '^([0-9]4)/[0-9]2/[0-9]2 [0-9]2:[0-9]2:[0-9]42$' => '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('/^\d4\/\d2\/\d2 \d2:\d2:\d2$/', $Date))
    $Format = 'Y/m/d H:i:s';

等等……

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

【讨论】:

以上是关于PHP函数获取日期格式?的主要内容,如果未能解决你的问题,请参考以下文章

php中日期函数date与gmdate在获取日期上的区别

php获取当前时间

如何通过PHP函数来获取今日日期的时间戳?

PHP日期和函数

PHP - 格式化日期

使用Smarty 获取当前日期时间和格式化日期时间的方法详解