Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ISO日期格式到错误日期_Php_Time_Iso - Fatal编程技术网

Php ISO日期格式到错误日期

Php ISO日期格式到错误日期,php,time,iso,Php,Time,Iso,这是一个简短的问题,但我搞不懂。这段代码: $date = '2015-12-08T00:00:00+01:00'; echo date('D', strtotime($date)); 返回Mon while $date = '2015-12-08T00:00:00'; echo date('D', strtotime($date)); 星期二返回。为什么呢?+01:00代表时区,但我认为这不会影响当天 首先我查到2015年12月8日实际上是星期二,所以现在我们知道第一个是不正确的 PHP的

这是一个简短的问题,但我搞不懂。这段代码:

$date = '2015-12-08T00:00:00+01:00';
echo date('D', strtotime($date));
返回Mon while

$date = '2015-12-08T00:00:00';
echo date('D', strtotime($date));

星期二返回。为什么呢?+01:00代表时区,但我认为这不会影响当天

首先我查到2015年12月8日实际上是星期二,所以现在我们知道第一个是不正确的

PHP的
date()
是一个Unix时间戳,根据他们自己的文档

我认为,如果将+1添加为时区,则在请求一周中的某一天时,会触发对+0时区(UTC)的计算,因此会返回星期一的23:00作为当前UTC时间

您可以在执行其余代码之前指定时区:
date\u default\u timezone\u set('Europe/Amsterdam')


将使用提供的时区或默认时区(如果未指定)解析日期字符串。我们无法从您发布的代码中看到您的服务器配置为哪个时区,但一旦解析日期并将其转换为您的时区,时间可能会合法地出现在前一天,因此您会看到
“继续”


可以通过
now
参数在
strotime
调用中提供时区,也可以全局设置一个。

“在我看来,+01:00代表时区,但不应该影响一天。”为什么不呢?在我的下一个当地午夜(格林尼治标准时间),这里是星期二,但在美国仍然是星期一。你在哪个时区?(或者,更具体地说,您的PHP环境设置在哪个时区?
echo(date\u default\u timezone\u get());
)我在欧洲/阿姆斯特丹时间。格林尼治时间+1。所以strotime取决于服务器的时间?这是否意味着该日期('D',标准时间(2015-12-08));有时是星期一,有时是星期二?如果我将PHP时区设置为“Europe/Amsterdam”,我会得到第一段代码的结果“Tue”。你确定你的时区是按照你的想法设置的吗?您是否运行了echo(date\u default\u timezone\u get())?感谢您的回复。它解决了我的问题。据我所知,Unix时间戳取决于您的服务器设置。今天又学到了一些东西。这是合乎逻辑的,因为代码需要一个时间参考点:您的服务器时间,您当然可以让它与时间服务器同步。
<?php
date_default_timezone_set('Europe/Amsterdam'); //this is an example of a +1 timezone, choose one from http://php.net/manual/en/timezones.php
$date = '2015-12-08T00:00:00+01:00';
echo date('D', strtotime($date) );
?>