匿名用户
基础知识
将一种日期格式转换为另一种格式的简单方法是将strToTime()与date()一起使用。 strToTime()将把日期转换为Unix时间戳。 然后,可以将该Unix时间戳传递给date()以将其转换为新格式。$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);
或者作为一行:$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
请记住,strToTime()要求日期的格式必须有效。 如果不能提供有效的格式,将导致strToTime()返回false,这将导致您的日期为1969-12-31。
使用DateTime()
从PHP 5.2开始,PHP提供了DateTime()类,它为我们提供了更强大的工具来处理日期(和时间)。 我们可以使用datetime()重写上述代码,如下所示:$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');
使用Unix时间戳
date()将Unix timeatamp作为其第二个参数,并为您返回格式化日期:$new_date_format = date('Y-m-d H:i:s', '1234567890');
DateTime()通过在时间戳前添加@来处理Unix时间戳:$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');
如果您拥有的时间戳是以毫秒为单位(它可能以000结束,并且/或者时间戳是13个字符长),您需要将其转换为秒,然后才能将其转换为其他格式。 有两种方法可以做到这一点:使用substr()删除后三位
修整后三位数字有几种方法,但使用substr()是最简单的:$timestamp = substr('1234567899000', -3);将子字符串除以1000
也可以通过除以1000将时间戳转换为秒。 由于时间戳对于32位系统来说太大,无法进行数学运算,因此需要使用BCMath库以字符串的形式进行数学运算:$timestamp = bcdiv('1234567899000', '1000');
要获取Unix时间戳,可以使用返回Unix时间戳的strToTime():$timestamp = strtotime('1973-04-18');
使用DateTime()可以使用DateTime::getTimeStamp()$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
如果您正在运行PHP5.2,则可以使用u格式化选项:$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
使用非标准和不明确的日期格式
不幸的是,并非开发人员必须处理的所有日期都是标准格式的。 幸运的是,PHP5.3为我们提供了一个解决方案。 DateTime::CreateFromFormat()允许我们告诉PHP日期字符串的格式,以便将其成功解析为DateTime对象进行进一步操作。$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');
在PHP 5.4中,我们获得了在实例化时进行类成员访问的能力,这允许我们将datetime()代码转换为单行代码:$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
$new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');