[英]Strtotime with European date format
我正在尝试使用 strtotime 转换以下日期:
2009 年 7 月 9 日 17:01:27
这是 9 月 7 日的欧洲/伦敦时区格式
该功能正在反转月份和日期,有什么解决方法吗? 谢谢
更改/
为-
,似乎 PHP 将/
作为美国格式,而-
作为欧洲格式。 你可以在这里看到:
$date = "06/10/2011 14:28"; // 6 october 2011 2:28 pm
$otherDate = "06-10-2011 14:28"; // 6 october 2011 2:28 pm
echo $stamp = strtotime($date) . "<br />"; // outputs 1307708880
echo $otherStamp = strtotime($otherDate) . "<br />"; // outputs 1317904080
echo date("d-m", $stamp); // outputs 10-06
echo date("d-m", $otherStamp); // outputs 06-10
如果您不在 Windows 上,则可以使用strptime
代替,并明确设置格式。 正如 OIS 指出的那样, strptime
在 Windows 上不可用。
要将拆分的年/月/日等值转换为 unix 时间戳,您可以将它们传递到mktime
。 有点繁琐,但它有效。
您可能想要这样做的一个原因是使用date
以不同的格式打印它。
从 strptime php.net 页面:
Example #1 strptime() 例子
<?php $format = '%d/%m/%Y %H:%M:%S'; $strf = strftime($format); echo "$strf\n"; print_r(strptime($strf, $format)); ?>
上面的示例将输出类似于:
2004 年 3 月 10 日 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] => )
尝试:
strtotime(07/09/2009 17:01:27 GMT);
或者先试试这个:
date_default_timezone_set('Europe/London');
我想最好的答案是不要使用 strtotime ,因为它的准确性永远不可能是 100%
这是一个应该有效的快速修复。 另一种方法是使用命名匹配的正则表达式。
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";
我写这篇文章时的最佳答案建议使用破折号,但对于任何寻找更清洁的东西的人来说,都不需要以特定方式设置面向用户的日期或进行手动字符串编辑,我建议使用日期时间::createFromFormat
$dateObject = DateTime::createFromFormat('d/m/Y H:i:s', '07/09/2009 17:01:27');
echo $dateObject->format('Y-m-d');
我绝对建议您阅读该功能的文档,但它有很多可能会导致您的用例出现问题的边缘案例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.