DateTime::__construct():无法解析时间

DateTime::__construct(): Failed to parse time

提问人:Ben 提问时间:9/13/2023 最后编辑:Ben 更新时间:9/13/2023 访问量:32

问:

今天发生了一些事情,早上工作正常。我不碰代码 现在它不起作用, 显示此错误:

Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (13/09 03:46 PM) at position 0
(1): Unexpected character' in position:243 Stack trace:
#0 position(243): DateTime->__construct('13/09 03:46 PM', Object(DateTimeZone)) #1 {main} thrown

代码:

$together = $cc_name . '/' . $e_name;
$ts = new DateTime(date('d/m h:i A'), new DateTimeZone('Asia/Jerusalem'));
$ts->setTimezone(new DateTimeZone($together));

$together这是一个从 SQL 中获取时区大陆的变量,它是城市。$cc_name$e_name

怎么了?

编辑:其结果var_dump$togetherstring(11) "Asia/Urumqi"

PHP 日期时间 时区

评论

3赞 aynber 9/13/2023
为什么要尝试从非标准时间格式创建日期?尤其是你没有路过,只是像现在这样创作?根据文档,如果您想要当前时间并想传递时区,请使用“现在”

答:

0赞 Machavity 9/13/2023 #1

DateTime 无法识别格式。您需要指定格式

$date = DateTime::createFromFormat('d/m g:i A', '13/09 03:46 PM');
// 09/13/2023 3:46 PM since this is 2023 and no year was specified
echo $date->format('m/d/Y g:i A'); 

这样做的问题是,你首先使格式变得复杂,并且必须做两倍的工作(所做的只是输出当前日期/时间)。更好的方法是date

$together = $cc_name . '/' . $e_name;
$ts = new DateTime(); // current time
$ts->setTimezone(new DateTimeZone($together));
echo $ts->format('d/m h:i A');