PHP - 日期格式问题

时间:2016-05-19 14:33:02

标签: php

我正在尝试格式化从英国格式到YYYY-MM-DD的日期,结果很奇怪。

我使用的代码是:

echo "<br>".$_GET['trans_date'];
echo "<br>".$_GET['next_payment'];
echo "<br>".$_GET['payment_date'];
echo "<br><br>".date("Y-m-d", strtotime($_GET['trans_date']));
echo "<br>".date("Y-m-d", strtotime($_GET['next_payment']));
echo "<br>".date("Y-m-d", strtotime($_GET['payment_date']));

我得到以下结果:

19/05/2016
01/06/2016
19/05/2016

1970-01-01
2016-01-06
1970-01-01

我期待以下结果:

19/05/2016
01/06/2016
19/05/2016

2016-05-19
2016-01-01
2016-05-19

任何人都可能出错吗?

谢谢,

约翰

3 个答案:

答案 0 :(得分:2)

您无法真正为strtotime设置区域设置。

如果你是美国人,你会看到11/12/10,并认为“2010年11月12日”。

如果你是澳大利亚人(或欧洲人),你认为这是“2010年12月11日”。

如果您是读取ISO的系统管理员,则看起来像“2011年12月10日”。

补偿此问题的最佳方法是修改加入字符。

正斜杠(/)表示美国M / D / Y格式, 短划线( - )表示欧洲D-M-Y和 句号(。)表示ISO Y.M.D.

所以,我的建议总是使用DateTime对象来避免不必要的错误。

Ex: $date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009');
echo $date->format('Y-m-d');

提出您的问题,解决方案是:

$trans_date = DateTime::createFromFormat('d/m/Y', $_GET['trans_date']);
$next_payment_date = DateTime::createFromFormat('d/m/Y', $_GET['next_payment']);
$payment_date = DateTime::createFromFormat('d/m/Y', $_GET['payment_date']);

echo "<br><br>".$trans_date->format('Y-m-d');
echo "<br>".$next_payment_date->format('Y-m-d');
echo "<br>".$payment_date->format('Y-m-d');

答案 1 :(得分:1)

这应该有效:

echo "<br><br>".date("Y-m-d", strtotime(str_replace('/', '-', $_GET['trans_date'])));
echo "<br>".date("Y-m-d", strtotime(str_replace('/', '-', $_GET['next_payment'])));
echo "<br>".date("Y-m-d", strtotime(str_replace('/', '-', $_GET['payment_date'])));

答案 2 :(得分:1)

只需将您指定的日期设为05/19/2016表示mm/dd/yy格式,即可修复。