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



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

我的数据库中的所有时间都存储为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);

sse_bot.php文件中date_default_timezone_get()所在的位置

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

代码块4

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

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

代码块5

$utimezone = $_SESSION['tzone'];

但是没有骰子。

任何想法吗?

编辑1

我回应了它,并且$utimezone = $_SESSION['tzone']; 确实将其设置为适当的值(在我的情况下为'America/Denver')。但问题似乎是,特别是与行:

代码块6

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

当我通过浏览器使用代码块2时,它工作得很好。我甚至可以把这行改成:

代码块7

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

一切都好。

sse_bot.php文件进行相同的更改没有效果。返回的时间与输入的时间相同。

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

问题是时区已经是'America/Denver'了,因为我没有设置它。在浏览器版本中,它是在其他地方设置的,但在sse_bot.php中,它不是。

只需添加:

date_default_timezone_set('GMT');

代码块6之前的某处,Bob是你的阿姨。

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

相关内容

  • 没有找到相关文章

最新更新