我尝试使用DateTime::createFromFormat()将字符串解析为日期,以避免在使用strtotime()时可能出现的几个本地问题。
字符串在:" 2016-01-14 00:16:18 UTC + 1"
所以我正在寻找一个映射给定日期的格式字符串。到目前为止,我已经尝试了以下格式,但它们不起作用。
$str = '2016-01-14 00:16:18 UTC+1';
$d = DateTime::createFromFormat('Y-m-d H:i:s e', $str);
$d = DateTime::createFromFormat('Y-m-d H:i:s eO', $str);
$d = DateTime::createFromFormat('Y-m-d H:i:s eP', $str);
$d = DateTime::createFromFormat('Y-m-d H:i:s T', $str);
$d = DateTime::createFromFormat('Y-m-d H:i:s TO', $str);
$d = DateTime::createFromFormat('Y-m-d H:i:s TP', $str);
所以问题是,我如何从这个时区的差异中划分出时区,或者如果不可能的话。然后我需要一种方法来处理它。
答案 0 :(得分:2)
问题基本上是字符串UTC+1
的一部分......但是,它与Etc/GMT+1
的有效TimeZone格式相差不远,所以应该可以重新映射它。
快速简便的方法就是取代' UTC'与' GMT':
$d = DateTime::createFromFormat('Y-m-d H:i:s e', str_replace('UTC', 'GMT', $str));
然后该字符串变为 2016-01-14 00:16:18 GMT + 1 ,其中 有效,您将获得一个有效的DateTime
对象。你可以用以下方法测试:
echo $d->format('Y-m-d H:i:s e')
// prints '2016-01-14 00:16:18 +01:00'
答案 1 :(得分:0)
<input type="date">
用户被迫使用正确的格式。然而它是mm-dd-yyyy。在欧洲,我们更喜欢第一天。
答案 2 :(得分:0)
以下是使用str_replace()
,
切断&#34; UTC&#34;,留下&#34; + 1&#34; - 这应该被&#34; e&#34;或&#34; P&#34;。
<强>来源
<?php
$str = '2016-01-14 00:16:18 UTC+1';
$str = str_replace('UTC', '', $str); // fix odd date string
$format = 'Y-m-d H:i:s P';
$date = DateTime::createFromFormat($format, $str);
var_dump($date);
echo $date->format('Y-m-d H:i:s');
<强>结果强>
object(DateTime)[1]
public 'date' => string '2016-01-14 00:16:18.000000' (length=26)
public 'timezone_type' => int 1
public 'timezone' => string '+01:00' (length=6)
2016-01-14 00:16:18