DateTime::createFromFormat

date_create_from_format

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

DateTime::createFromFormat -- date_create_from_format根据指定格式解析时间字符串

描述

面向对象风格

public static DateTime::createFromFormat(string $format, string $datetime, ?DateTimeZone $timezone = null): DateTime|false

过程式风格

返回一个新的 DateTime 对象,表示由 datetime 字符串指定的日期和时间,该字符串使用给定的 format 格式化。

DateTimeImmutable::createFromFormat()date_create_immutable_from_format() 分别类似,但创建 DateTime 对象。

此方法(包括参数、示例和注意事项)在 DateTimeImmutable::createFromFormat 页面中有详细说明。

返回值

返回一个新的 DateTime 实例,或在失败时返回 false

错误/异常

datetime 包含空字节时,此方法会抛出 ValueError

变更日志

版本 描述
8.0.21, 8.1.8, 8.2.0 现在在将空字节传递给 datetime 时抛出 ValueError,之前是默默忽略的。

示例

有关大量示例,请参见 DateTimeImmutable::createFromFormat.

参见

添加笔记

用户贡献的笔记 2 个笔记

6
Steven De Volder
10 个月前
在以下代码中
$t = microtime(true);
$now = DateTime::createFromFormat('U.u', $t);
$now = $now->format("H:i:s.v");

如果 microtime(true) 恰好返回一个所有小数位都为零的浮点数,则尝试 format() 会返回致命错误。这是因为 DateTime::createFromFormat('U.u', $aFloatWithAllZeros) 返回 false。

解决方法(while 循环用于测试解决方案是否有效)

$t = microtime(true);
$now = DateTime::createFromFormat('U.u', $t);
while (!is_bool($now)) {// 用于测试解决方案
$t = microtime(true);
$now = DateTime::createFromFormat('U.u', $t);
}
if (is_bool($now)) {// 问题
$now = DateTime::createFromFormat('U', $t);// 解决方案
}
$now = $now->format("H:i:s.v");
-2
mariani dot v at sfeir dot com
7 个月前
避免 microtime 返回非小数浮点数时发生错误的最简单方法是使用 sprintf 将其结果强制转换为浮点数

$t = microtime(true);
$now = DateTime::createFromFormat('U.u', sprintf('%f', $t));
$now = $now->format("H:i:s.v");
To Top