php中的日期时间构造函数
我在php类上做了一个小实验。在文档中,他们给出了创建DateTime类对象的语法 面向对象的样式:php中的日期时间构造函数,php,datetime,timezone,Php,Datetime,Timezone,我在php类上做了一个小实验。在文档中,他们给出了创建DateTime类对象的语法 面向对象的样式: public DateTime::__construct() ( [ string $time = "now" [, DateTimeZone $timezone = NULL ]] ) 程序风格: DateTime date_create ( [ string $time = "now" [, DateTimeZone $timezone = NULL ]] ) 返回新的DateTime对
public DateTime::__construct() ( [ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
程序风格:
DateTime date_create ( [ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
返回新的DateTime对象
这里是他们指定为必填的第一个参数,如第节中指定的日期/时间字符串。或者,在使用$timezone参数时,我们必须在此处传递NULL
,以获取当前时间
但我的问题是,当我给出以下代码时:
date_default_timezone_set('America/Los_Angeles');
$d_ob = new DateTime('x');
echo $d_ob->format('Y-m-d');
它应该会生成异常,但它会像-
2013-09-29
我不明白它是如何工作的?显然,这不是一个bug,它是“预期的,但未记录的行为”。所有单个字母(j除外)代表军事时区 还有更多的信息 从 军事标准对每个区域使用单个字符。“Z”是世界时。“A”表示提前一小时,“M”表示提前12小时;“N”表示一小时后,“Y”表示12小时后。不使用字母“J” 所以我来回答你的问题 我不明白这是怎么回事 当向DateTime::_construct()传递一个不是有效时间字符串的值时,它会假定省略了第一个参数,并尝试将该字符串解析为时区。正如RFC所解释的,“x”是一个有效的时区,因此您将得到一个位于时区“x”中的DateTime实例 我应该提到,尽管\DateTime的构造函数识别这些单字母区域,但\DateTimeZone的构造函数
我希望这会有所帮助。您使用的是哪个版本的PHP?第一个参数不是必需的,两个参数都是可选的。仅供参考。X代表X射线时区(UTC-1100),士兵
newdatetime('zzz')
或newDateTime('zzz')
也会给出今天的日期。这种行为似乎适用于重复字符(不区分大小写)。