我正在尝试使用strtotime转换以下日期:
07/09/2009 17:01:27
这是9月7日的欧洲/伦敦时区格式
该功能正在反转月份和日期,是否有解决方法? 感谢
答案 0 :(得分:19)
更改/
的{{1}},好像PHP以美国格式获取-
,而/
为欧洲格式。你可以在这里看到:
-
答案 1 :(得分:5)
如果您不在Windows上,则可以使用strptime
代替,并明确设置格式。正如OIS指出的那样,strptime
在Windows上不可用。
要将拆分年/月/日等值转换为unix时间戳,您可以将它们传递到mktime
。略显繁琐,但它确实有效。
您可能希望这样做的一个原因是使用date
以不同的格式打印它。
来自strptime php.net页面:
示例#1 strptime()示例
<?php $format = '%d/%m/%Y %H:%M:%S'; $strf = strftime($format); echo "$strf\n"; print_r(strptime($strf, $format)); ?>
上面的例子将输出 类似于:
03/10/2004 15:54:19
Array ( [tm_sec] => 19 [tm_min] => 54 [tm_hour] => 15 [tm_mday] => 3 [tm_mon] => 9 [tm_year] => 104 [tm_wday] => 0 [tm_yday] => 276 [unparsed] => )
答案 2 :(得分:5)
DateTime可以轻松应对:
$datetime = new DateTime('07/09/2009 17:01:27', new DateTimeZone('Europe/London'));
echo $datetime->format('d/m/Y H:i:s');
答案 3 :(得分:2)
尝试:
strtotime(07/09/2009 17:01:27 GMT);
或者先试试这个:
date_default_timezone_set('Europe/London');
我想最好的答案是不要使用strtotime,因为你的准确性永远不会是100%
答案 4 :(得分:1)
这是一个应该有效的快速修复方法。另一种方法是使用命名匹配的正则表达式。
function eurototime($string)
{
static $sorted = array(
'tm_hour' => null,
'tm_min' => null,
'tm_sec' => null,
'tm_mon' => null,
'tm_mday' => null,
'tm_year' => null,
);
static $unsorted = array(
'tm_mday',
'tm_mon',
'tm_year',
'tm_hour',
'tm_min',
'tm_sec',
);
static $format = '%d/%d/%d %d:%d:%d';
$parsed = sscanf($string, $format);
$data = array_combine($unsorted, $parsed);
$sortedData = array_merge($sorted, $data);
$int = call_user_func_array('mktime', $sortedData);
return $int;
}
date_default_timezone_set('Europe/London');
echo eurototime(date('d/m/Y H:i:s')), "\n", time(),"\n";