strtotime 和 date 返回不正确的日期
strtotime and date returning incorrect date
我不确定我在这里做错了什么,但是当我从日期字符串转换为 strtotime 并返回格式更好的日期字符串时,日期是错误的:
2015-03-20T20:00:00-0600 | Saturday Mar 21, 2015 02 00:am
左边是输入变量 & 右边是以下代码的输出:
<?php
$eventDate = '2015-03-20T20:00:00-0600';
$originalTime = $eventDate;
$eventDate = date('l M j, Y h i:a', strtotime($eventDate));
?>
Date: <?php echo $originalTime;?> | <?php echo $eventDate; ?>
正确的输出应该是Friday March 20th, 2015 8:00pm
您需要设置默认时区。
http://php.net/manual/en/function.date-default-timezone-set.php
date_default_timezone_set(字符串 $timezone_identifier)
我不确定你的服务器配置的时区,但试试这个:
<?php
date_default_timezone_set('UTC');
$eventDate = '2015-03-20T20:00:00+0000';
$originalTime = $eventDate;
$eventDate = date('l M j, Y h i:a', strtotime($eventDate));
?>
Date: <?php echo $originalTime;?> | <?php echo $eventDate; ?>
作为旁注,我将时区偏移量从 -0600 更改为 +0000
也就是说,在您设置默认时区或更正 $eventDate 中的时区偏移之前,您尝试设置的日期(使用 -0600 语言环境)会自动适应您服务器的本地时间.
我会使用较新的 \DateTime API。还要适当地设置默认时区。在大多数情况下,您可以省略下面的时区参数。我保留它是为了在必要时展示它是如何完成的。
$timezone = new DateTimeZone("America/New_York");
$eventDate = new DateTime('2015-03-20T20:00:00-0600', $timezone);
echo $eventDate->format('l M j, Y h i:a') . "\n";
其实是对的。 -0600 部分表示您的输入字符串比系统时间早 6 小时,因此 PHP 增加 6 小时,从而得到 Mar 21, 2015 02 00:am
.
要获得正确的日期和时间,请使用 date_default_timezone_set()
函数。对我来说是:
date_default_timezone_set("Europe/Amsterdam");
这会将时间从 UTC 转换为您的本地时间。如果这对您不起作用,您可以随时使用 strstr()
:
$eventDate = strstr($eventDate, '+', true);
if ($eventDate === false) {
$eventDate = $originalTime;
}
我不确定我在这里做错了什么,但是当我从日期字符串转换为 strtotime 并返回格式更好的日期字符串时,日期是错误的:
2015-03-20T20:00:00-0600 | Saturday Mar 21, 2015 02 00:am
左边是输入变量 & 右边是以下代码的输出:
<?php
$eventDate = '2015-03-20T20:00:00-0600';
$originalTime = $eventDate;
$eventDate = date('l M j, Y h i:a', strtotime($eventDate));
?>
Date: <?php echo $originalTime;?> | <?php echo $eventDate; ?>
正确的输出应该是Friday March 20th, 2015 8:00pm
您需要设置默认时区。
http://php.net/manual/en/function.date-default-timezone-set.php
date_default_timezone_set(字符串 $timezone_identifier)
我不确定你的服务器配置的时区,但试试这个:
<?php
date_default_timezone_set('UTC');
$eventDate = '2015-03-20T20:00:00+0000';
$originalTime = $eventDate;
$eventDate = date('l M j, Y h i:a', strtotime($eventDate));
?>
Date: <?php echo $originalTime;?> | <?php echo $eventDate; ?>
作为旁注,我将时区偏移量从 -0600 更改为 +0000
也就是说,在您设置默认时区或更正 $eventDate 中的时区偏移之前,您尝试设置的日期(使用 -0600 语言环境)会自动适应您服务器的本地时间.
我会使用较新的 \DateTime API。还要适当地设置默认时区。在大多数情况下,您可以省略下面的时区参数。我保留它是为了在必要时展示它是如何完成的。
$timezone = new DateTimeZone("America/New_York");
$eventDate = new DateTime('2015-03-20T20:00:00-0600', $timezone);
echo $eventDate->format('l M j, Y h i:a') . "\n";
其实是对的。 -0600 部分表示您的输入字符串比系统时间早 6 小时,因此 PHP 增加 6 小时,从而得到 Mar 21, 2015 02 00:am
.
要获得正确的日期和时间,请使用 date_default_timezone_set()
函数。对我来说是:
date_default_timezone_set("Europe/Amsterdam");
这会将时间从 UTC 转换为您的本地时间。如果这对您不起作用,您可以随时使用 strstr()
:
$eventDate = strstr($eventDate, '+', true);
if ($eventDate === false) {
$eventDate = $originalTime;
}