将日期转换为另一种格式
基础
将一种日期格式转换为另一种日期格式的简单方法是将 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 时间戳作为其第二个参数,并为你返回格式化的日期:
$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);
- 将 substr 除以 1000
你还可以通过除以 1000 将时间戳转换为秒。由于时间戳太大,32 位系统无法进行数学运算,因此需要使用 BCMath 库将数学作为字符串进行处理:
$timestamp = bcdiv('1234567899000', '1000');
要获取 Unix 时间戳,你可以使用 strtotime()
返回 Unix 时间戳:
$timestamp = strtotime('1973-04-18');
使用 DateTime()
,你可以使用 DateTime::getTimestamp()
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
如果你运行的是 PHP 5.2,则可以使用 U
格式化选项:
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
使用非标准和模糊的日期格式
不幸的是,并非开发人员必须使用的所有日期都采用标准格式。幸运的是,PHP 5.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');
不幸的是,这还不适用于 DateTime::createFromFormat()
。