我正在使用imap_check
检索日期,并返回如下值:
星期五,2014年2月21日14:02:37 +0000(GMT)
这似乎与文档不符,我期待:
星期五,2014年2月21日14:02:37 +0000
我尝试更改格式以匹配结果但不起作用:
//Old RFC2822 format
$date = DateTime::createFromFormat('D, d M Y H:i:s O',$dateString);
//Using timezone abbrev
$date = DateTime::createFromFormat('D, d M Y H:i:s O (T)',$dateString);
//Using timezone identifier
$date = DateTime::createFromFormat('D, d M Y H:i:s O (e)',$dateString);
但是,上述两次尝试都会返回false
的日期。
答案 0 :(得分:2)
您在括号中使用(T)
的第二次尝试看起来几乎是正确的,但省略()
$d = DateTime::createFromFormat('D, d M Y H:i:s O T', 'Fri, 21 Feb 2014 14:02:37 +0000 (GMT)');
//-----------------------------------------------^^^
var_dump($d);
class DateTime#3 (3) {
public $date =>
string(19) "2014-02-21 14:02:37"
public $timezone_type =>
int(2)
public $timezone =>
string(3) "GMT"
}
为什么会这样,I cannot find in the documentation。如果你这样做:
echo date('T');
// CST
...你得到的时区缩写没有括号括起来。但根据链接的DateTime::createFromFormat()
文档,;, :, /, ., ,, -, ( or )
应按字面解释。
哦,这里有点有趣:
// Works!!
$d = DateTime::createFromFormat('D, d M Y H:i:s O (T', 'Fri, 21 Feb 2014 14:02:37 +0000 (GMT)');
//-----------------------------------------------^^^ Open but no close )
var_dump($d);
class DateTime#6 (3) {
public $date =>
string(19) "2014-02-21 14:02:37"
public $timezone_type =>
int(2)
public $timezone =>
string(3) "GMT"
}
// Fails!!
$d = DateTime::createFromFormat('D, d M Y H:i:s O (T)', 'Fri, 21 Feb 2014 14:02:37 +0000 (GMT)');
// -----------------------------------------------^^^^ open and close ()
var_dump($d);
bool(false)
看起来这可能与标识in this answer的T
时区解析行为有关,其中时区缩写字符串仅解析为最终)
。
答案 1 :(得分:1)
这是一个有效的日期:
Sun (Dimanche), (trente-un) 31 (march) Mar (mille-neuf-cent-quatre-vingt-seize) 1996 (tres bon) 15():(bla)53:(blah)10 +0200 (WET)
删除所有评论,您的格式应该没问题。