javascript - PHP,服务器发送事件 - date_default_timezone_get() 在远程文件中无法正常工作

标签 javascript php datetime

我正在使用服务器发送的事件,并尝试根据查看者的本地时间显示时间。

我的数据库中的所有时间均以 GMT 形式存储在 DATETIME 字段中:

代码块 1

date_default_timezone_set('GMT');
$now = date('Y-m-d H:i:s');

$stmt = $db->prepare('INSERT INTO...');
$stmt->execute(array($now));

然后相反(可能比需要的更复杂):

代码块 2

$utimezone = date_default_timezone_get();
$then = date($row['ndate']);
$date = date_create($then);
$date->setTimezone(new DateTimeZone($utimezone));
$nDate = date_format($date, 'd M \'y (g:i A)');

当窗口在浏览器中运行时,这一切都可以正常工作,但当 date_default_timezone_get() 位于远程调用的文件中时,这一切都会崩溃:

JavaScript

代码块 3

var src = new EventSource('sse_bot.php?uid=' + userID);

其中 date_default_timezone_get() 位于 sse_bot.php 文件中。

我尝试从浏览器窗口设置 session 变量:

代码块 4

$utimezone = date_default_timezone_get();
$_SESSION['tzone'] = $utimezone;

然后在 sse_bot.php 文件中使用它:

代码块 5

$utimezone = $_SESSION['tzone'];

但是没有骰子。

有什么想法吗?

编辑 1

我回显了它,并且 $utimezone = $_SESSION['tzone']; 确实将其设置为适当的值(在我的例子中为“美国/丹佛” )。但问题似乎出在这一行:

代码块 6

$date->setTimezone(new DateTimeZone($utimezone));

当我通过浏览器使用代码块2时,它工作得很好。我什至可以将该行更改为:

代码块 7

$date->setTimezone(new DateTimeZone('America/Denver'));

一切都很好。

sse_bot.php 文件进行相同的更改没有效果。经过所有的轻微操作后,返回的时间与进入的时间相同。

最佳答案

我认为你没有捕获重点。所有 PHP 都在服务器上运行,因此将始终反射(reflect)服务器的时区版本 - 这是每种情况下的预期行为。如果您想找到客户端的时区,那么您需要在 Javascript 中查询并将报告的值发送回服务器。

关于javascript - PHP,服务器发送事件 - date_default_timezone_get() 在远程文件中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38176836/

相关文章:

javascript - 如何在单个组件上制作悬停事件?

php - 显示默认图像

php - Magento - customer_save_after 总是解雇两次

javascript - 如何在 javascript 中将字符串转换为 Date 类?

c# - 系统时间关闭时如何使用 SQL Server 的 GETDATE()?

r 绘制时间序列 abline 奇怪的行为

javascript - 使用 jsdom 更改 HTML 标签

javascript - e.preventDefault - e 未定义

javascript - 将这个和第二个参数传递给回调函数

php - 确保信息之后?是一个整数