1

对于 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:30pm”和 strtotime(“10/31/2012 7:30pm EST”)。

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

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

谢谢

4

2 回答 2

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 月,问题将自行解决:-)

于 2012-08-01T05:46:26.423 回答
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 时间。如果您尝试使用 date 代替,您将,除非您居住在 GMT 时区(格林威治标准时间),否则很可能不会得到 10:59。

这个时区的东西可能会变得非常混乱,所以在制定非常具体的计划时要非常小心并搞砸它……比如将某人的时间转换为你的时间等等。

于 2013-05-16T04:14:42.840 回答