Javascript PHP,服务器发送事件-日期\默认\时区\获取()在远程文件中无法正常工作
我正在使用服务器发送的事件,并尝试根据查看器的本地时间显示时间 我的数据库中的所有时间都以GMT格式存储在Javascript PHP,服务器发送事件-日期\默认\时区\获取()在远程文件中无法正常工作,javascript,php,datetime,Javascript,Php,Datetime,我正在使用服务器发送的事件,并尝试根据查看器的本地时间显示时间 我的数据库中的所有时间都以GMT格式存储在DATETIME字段中: 代码块1 然后是相反的情况(可能比需要的更复杂): 代码块2 当窗口在浏览器中处于活动状态时,这一切都正常工作,但当date\u default\u timezone\u get()位于远程调用的文件中时,这一切都会崩溃: JavaScript 代码块3 其中,date\u default\u timezone\u get()位于sse\u bot.php文件中 我
DATETIME
字段中:
代码块1
然后是相反的情况(可能比需要的更复杂):
代码块2
当窗口在浏览器中处于活动状态时,这一切都正常工作,但当date\u default\u timezone\u get()
位于远程调用的文件中时,这一切都会崩溃:
JavaScript
代码块3
其中,date\u default\u timezone\u get()
位于sse\u bot.php
文件中
我尝试从浏览器窗口设置会话变量:
代码块4
然后在sse_bot.php
文件中使用它:
代码块5
但是没有骰子
有什么想法吗
编辑1
我回显了它,并且$utimezone=$\u SESSION['tzone']代码>将其设置为适当的值(在我的例子中为“美国/丹佛”)。但问题似乎特别在于:
代码块6
当我通过浏览器使用代码块2时,它可以完美地工作。我甚至可以将该行更改为:
代码块7
一切都很好
对sse_bot.php
文件进行相同的更改无效。经过一番轻描淡写之后,返回的时间与进入它的时间是一样的。我想你错过了这里的要点。所有PHP都在服务器上运行,因此总是反映服务器的时区版本——这是所有情况下的预期行为。如果你想找到客户端的时区,那么你需要用Javascript进行查询,并将报告的值发送回服务器。我认为你错过了这里的要点。所有PHP都在服务器上运行,因此总是反映服务器的时区版本——这是所有情况下的预期行为。如果要查找客户端的时区,则需要使用Javascript进行查询,并将报告的值发送回服务器。问题是时区已经是“America/Denver”,因为我没有设置其他时区。在浏览器版本中,它是在别处设置的,但在sse_bot.php
中,它不是
只需补充:
date_default_timezone_set('GMT');
在代码块6之前的某个地方,鲍勃是你的阿姨
(可能不值得回答,更适合评论,但未来的绊脚石会更容易找到这个。)问题是时区已经是“美国/丹佛”,因为我没有设置其他时区。在浏览器版本中,它是在别处设置的,但在sse_bot.php
中,它不是
只需补充:
date_default_timezone_set('GMT');
在代码块6之前的某个地方,鲍勃是你的阿姨
(可能不值得回答,更适合评论,但未来的绊脚石会更容易找到这一条。)FWIW:对于将来的参考,始终存储为UTC并从那里转换:)FWIW:对于将来的参考,始终存储为UTC并从那里转换:)请查看我的答案。PHP很乐意进行时间转换,只要设置了适当的标识符。在我的例子中,我忽略了将当前时区设置为GMT请查看我的答案。PHP很乐意进行时间转换,只要设置了适当的标识符。就我而言,我忽略了将当前时区设置为GMT
var src = new EventSource('sse_bot.php?uid=' + userID);
$utimezone = date_default_timezone_get();
$_SESSION['tzone'] = $utimezone;
$utimezone = $_SESSION['tzone'];
$date->setTimezone(new DateTimeZone($utimezone));
$date->setTimezone(new DateTimeZone('America/Denver'));
date_default_timezone_set('GMT');