PHP strtotime EST来回转换

时间:2012-08-01 05:09:00

标签: php datetime date strtotime

对于EST时间,我已经设置:

date_default_timezone_set("America/New_York");

当页面加载时,我通过以下方式获得EST时间:

$time = time();

问题是当我在时间戳和日期时间格式之间来回转换字符串时:

10/31/2012 7:30pm 1351729800 | 10/31/2012, 8:30 pm
11/2/2012 7:30pm 1351902600 | 11/02/2012, 8:30 pm
11/3/2012 8:00pm 1351990800 | 11/03/2012, 9:00 pm
11/7/2012 8:00pm 1352336400 | 11/07/2012, 8:00 pm
11/9/2012 8:00pm 1352509200 | 11/09/2012, 8:00 pm
11/10/2012 8:00pm 1352595600 | 11/10/2012, 8:00 pm

我期待着这些日期&时间是一样的。

第一部分(在“|”之前)只是字符串,例如“10/31/2012 7:30 pm”和strtotime(“10/31/2012 7:30 pm EST”)。

(“|”之后的部分是前一个strtotime()值的date()。

如何从字符串转换为时间(strtotime)并仔细检查返回的日期格式是否与字符串输入相同?

由于

2 个答案:

答案 0 :(得分:3)

我要说这是因为目前纽约正处于夏令时 - EDT而不是EST。这会影响到这样的事情:

date_default_timezone_set("America/New_York");
strtotime("10/31/2012 7:30pm"); // translates to "Wed, 31 Oct 2012 19:30:00 -0400"
strtotime("10/31/2012 7:30pm EDT"); // translates to "Wed, 31 Oct 2012 19:30:00 -0400"
strtotime("10/31/2012 7:30pm EST"); // translates to "Wed, 31 Oct 2012 20:30:00 -0400"

快速修复可能是不将时区添加到字符串中,strtotime()将使用您设置的正确默认时区。

使用DateTime createFromFormat函数,您可以更准确地了解日期的解析方式:

$date = DateTime::createFromFormat('m/d/Y g:ia', "10/31/2012 7:30pm");
echo $date->format('U');

或者,如果你等到11月问题将自行解决:-)

答案 1 :(得分:1)

有时您需要在PHP脚本中设置并忘记时间,并且转移到新服务器可能会改变您的辛勤工作。如果您正在使用字符串来表示日期,例如将您的时区代码添加到您的字符串中,例如New Yourk夏令时:'EDT'

echo date('g:i a',strtotime('10:59 EDT'));// 10:59 am

或者如果你想提取一个特定时间的秒数,让我们说晚上10:59,使用类似的东西:

echo gmdate('g:i a',strtotime('January 1 1970 10:59pm GMT'));//82740 seconds //converted to 10:59pm

后者会给你(12 + 10小时(* 60)和59分钟)* 60秒,并且gmdate函数将从你传递给函数的几秒钟开始回显GMT时间..如果你尝试约会相反,除非你住在格林威治标准时间(格林威治标准时间),否则你很可能不会得到10:59。

这个时区的东西可能会变得非常混乱,因此在制定非常具体的计划时要非常小心并把它弄得乱七八糟......比如将某些时间转换成你的等等。