在 PHP 中将一种日期格式转换为另一种日期格式

2022-08-30 05:57:48

有没有一种简单的方法可以在PHP中将一种日期格式转换为另一种日期格式?

我有这个:

$old_date = date('y-m-d-h-i-s');            // works

$middle = strtotime($old_date);             // returns bool(false)

$new_date = date('Y-m-d H:i:s', $middle);   // returns 1970-01-01 00:00:00

但我当然希望它返回当前日期,而不是破解的黎明。我做错了什么?


答案 1

第二个参数需要是正确的时间戳(自 1970 年 1 月 1 日起的秒数)。您正在传递一个字符串,date() 无法识别该字符串。date()

可以使用 strtotime() 将日期字符串转换为时间戳。但是,即使是 strtotime() 也无法识别格式。y-m-d-h-i-s

PHP 5.3 及更高版本

使用 DateTime::createFromFormat。它允许您使用语法指定确切的掩码来解析传入的字符串日期。date()

PHP 5.2 及更低版本

您将必须手动解析元素(年,月,日,小时,分钟,秒),并将结果交给mktime(),这将为您构建时间戳。substr()

但这是很多工作!我建议使用 strftime() 可以理解的不同格式。strftime() 可理解 .例如,这有效:the next time joe will slip on the ice

$old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
$old_date_timestamp = strtotime($old_date);
$new_date = date('Y-m-d H:i:s', $old_date_timestamp);   

答案 2

最简单的方法是

$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('m/d/Y');

您首先要为它提供$dateString格式。然后,您将告诉它您想要$newDateString的格式。

这也避免了strtotime的使用,strtotime有时可能很难使用。

如果您没有从一种日期格式转换为另一种日期格式,而只是希望以特定格式显示当前日期(或日期时间),那么它甚至更容易:

$now = new DateTime();
$timestring = $now->format('Y-m-d h:i:s');

另一个问题也涉及同一主题:转换日期格式yy-mm-dd =>dd-mm-yyyy


推荐