DateTime::createFromFormat
DateTime::createFromFormat
date_create_from_format
(PHP 5 >= 5.3.0, PHP 7)
DateTime :: createFromFormat - date_create_from_format - 根据指定的格式分析时间字符串
描述
面向对象的风格
public static DateTime DateTime::createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )
程序风格
DateTime date_create_from_format ( string $format , string $time [, DateTimeZone $timezone ] )
返回一个新的DateTime对象,该对象表示由time
给定格式的字符串指定的日期和时间format
。
参数
format
传入的字符串格式应该在。请参阅下面的格式选项。在大多数情况下,可以使用与date()相同的字母。
格式字符 | 描述 | 示例可分析值 |
---|---|---|
Day | ||
d and j | 月份的日期,2位数字有或没有前导零 | 01至31或1至31 |
D and l | 一天的文字表示 | 周一至周日或周日至周六 |
S | 本月的英文序号后缀,2个字符。处理时忽略它。 | st,nd,rd或th。 |
z | 一年中的某一天(从0开始) | 0到365 |
Month | ||
F and M | 一个月的文字表示,例如1月或9月 | 1月至12月或1月至12月 |
m and n | 一个月的数字表示,带或不带前导零 | 01至12或1至12 |
Year | ||
Y | 一年的完整数字表示,4位数字 | 例如:1999年或2003年 |
y | 一年的两位数字表示(假定为1970-2069,包括在内) | 例如:99或03(将分别解释为1999和2003) |
Time | ||
a and A | 中午中午前后 | 上午或下午 |
g and h | 一小时的12小时格式,带或不带前导零 | 1至12或01至12 |
G and H | 一小时24小时格式,带或不带前导零 | 0至23或00至23 |
i | 与前导零分钟 | 00至59 |
s | 秒,前导零 | 00至59 |
u | 微秒(最多六位数字) | 例如:45,654321 |
Timezone | ||
e, O, P and T | 时区标识符,或与UTC之间的差异(以小时为单位),或与UTC之间的差异(小时和分钟之间的冒号)或时区缩写 | 例如:UTC,GMT,大西洋/亚速尔群岛或+0200或+02:00或EST,MDT |
Full Date/Time | ||
U | 自Unix时代开始秒(1970年1月1日00:00:00 GMT) | 例如:1292177455 |
空白和分隔符 | ||
(空间) | 一个空格或一个选项卡 | 例: |
以下分隔符号之一:;,:,/,。,,, - ,(或) | 示例:/ | |
;, :, /, ., ,, -, ( or ) | 指定的字符。 | 例如: - |
? | 一个随机字节 | 例如:^(请注意,对于UTF-8字符,您可能需要多个?在这种情况下,使用*可能是您想要的) |
* | 随机字节,直到下一个分隔符或数字 | 例如:*在Y - * - d中字符串2009-aWord-08将匹配aWord |
! | 将所有字段(年,月,日,小时,分钟,秒,分数和时区信息)重置到Unix Epoch | 没有!,所有字段将被设置为当前的日期和时间。 |
| | 如果尚未分析,则将所有字段(年,月,日,小时,分钟,秒,分数和时区信息)重置为Unix时期 | YMD | 会将年,月和日设置为要解析的字符串中的信息,并将小时,分钟和秒设置为0。 |
+ | 如果此格式说明符存在,则字符串中的数据尾随不会导致错误,而是会出现警告 | 使用DateTime :: getLastErrors()来确定尾随数据是否存在。 |
格式字符串中无法识别的字符将导致解析失败,并将错误消息追加到返回的结构中。您可以使用DateTime :: getLastErrors()查询错误消息。
要包含文字字符format
,您必须用反斜杠(__)将它们转义。
如果format
不包含角色!
那么未被指定的部分生成时间format
将被设置为当前系统时间。
如果format
包含角色!
,那么生成的部分时间没有提供format
,以及值的左侧!
,将被设置为Unix时代的相应值。
Unix纪元是1970-01-01 00:00:00 UTC。
time
代表时间的字符串。
timezone
代表所需时区的DateTimeZone对象。
如果timezone
省略并且不time
包含时区,则将使用当前时区。
注意
:timezone
当time
参数包含UNIX时间戳(例如946684800
)或指定时区(例如2010-01-28T15:00:00 + 02:00
)时,参数和当前时区将被忽略。
返回值
返回新的DateTime实例或FALSE
失败。
更新日志
版 | 描述 |
---|---|
5.3.9 | +格式说明符已被添加。 |
例子
示例 #1 DateTime::createFromFormat() example
面向对象的风格
<?php
$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009'
echo $date->format('Y-m-d'
?>
程序风格
<?php
$date = date_create_from_format('j-M-Y', '15-Feb-2009'
echo date_format($date, 'Y-m-d'
?>
上面的例子会输出:
2009-02-15
示例 #2 Intricacies of DateTime::createFromFormat()
<?php
echo 'Current time: ' . date('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d';
$date = DateTime::createFromFormat($format, '2009-02-15'
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17'
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-!d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17'
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = '!d';
$date = DateTime::createFromFormat($format, '15'
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
?>
上面的例子会输出类似于:
Current time: 2010-04-23 10:29:35
Format: Y-m-d; 2009-02-15 10:29:35
Format: Y-m-d H:i:s; 2009-02-15 15:16:17
Format: Y-m-!d H:i:s; 1970-01-15 15:16:17
Format: !d; 1970-01-15 00:00:00
示例#3使用文字字符的格式化字符串
<?php
echo DateTime::createFromFormat('H\h i\m s\s','23h 15m 03s')->format('H:i:s'
?>
上面的例子会输出类似于:
23:15:03