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

时间:2016-07-04 04:10:23

标签: javascript php datetime

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

我的数据库中的所有时间都存储为GMT,位于DATETIME字段中:

代码块

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

代码块

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

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

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

代码块4

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

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

代码块

$utimezone = $_SESSION['tzone'];

但没有骰子。

有什么想法吗?

编辑1

我回复了它,$utimezone = $_SESSION['tzone']; 将其设置为适当的值(在我的情况下为'America / Denver')。但具体而言,问题似乎在于:

代码块6

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

当我通过浏览器使用 Code Block 2 时,它可以完美运行。我甚至可以将行改为:

代码块7

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

一切都很好。

sse_bot.php文件进行相同的更改无效。在所有轻微的手段之后返回的时间与进入它的时间相同。

2 个答案:

答案 0 :(得分:0)

我想你错过了这一点。所有PHP都在服务器上运行,因此将始终反映服务器的时区版本 - 这是每种情况下的预期行为。如果要查找客户端的时区,则需要在Javascript中查询并将报告的值发送回服务器。

答案 1 :(得分:0)

问题在于时区已经是美国/丹佛',因为我没有设置它。在浏览器版本中,它在其他位置设置,但在sse_bot.php中,它不是。

只需添加:

date_default_timezone_set('GMT');
Code Block 6 之前的某个地方,Bob是你的阿姨。

(可能不值得回答,更适合评论,但未来的傻瓜会更容易找到这个。)