gpt4 book ai didi

php - 我应该如何以一种可以可靠地用于转换为其他时区的方式在服务器端存储来自 JS 的时间戳?

转载 作者:搜寻专家 更新时间:2023-10-31 21:43:09 24 4
gpt4 key购买 nike

我有一个网站,我可以在该网站上为位于美国西部的水疗中心设置预约,例如太平洋标准时间。

当用户为 2010 年 3 月 20 日上午 10:00 选择一个地点时,从客户端在我的桌面上使用美国东部时间创建的日期对象是:

timestamp: 1395324000000
utc string: Thu Mar 20 2014 10:00:00 GMT-0400 (EDT)

我需要将其存储在服务器端。目前,我通过 XHR 将时间戳从 JS 传递到 PHP 并除以 1000:

ajax 网址:ajax.php?timestamp=1395324000000
php代码:

$time = $_GET['timestamp'] / 1000;

因为我的默认时区手动设置为 America/New_York,而我的客户端时间是美国东部时间,所以它们是一致的,所以显示正确的时间:

echo date('M d Y H:i:s', $time); // Mar 20 2014 10:00:00

但理想情况下,我认为我真的应该将服务器端日期时间设置为 America/Los_Angeles.. 但这会使 echo date 显示错误的日期,因为它会PST 而不是 EDT:

date_default_timezone_set('America/Los_Angeles');
Mar 20 2014 07:00:00

当用户最初选择上午 10:00 时,现在变成了上午 7:00,这显然会导致混淆......如果用户选择上午 10:00,我需要它是上午 10:00。

我的另一个担心是,如果用户的客户端时间不是美国东部时间怎么办?它会不会与 America/New_YorkAmerica/Los_Angeles 一致?

我是否应该做一些事情,比如在 Javascript 中通过 .toUTCString 保存 UTC 字符串,然后将时间存储在 UTC 中,并将默认时区设置为 UTC,然后在我将其转换为 PST 时间时需要显示PST时间?

顺便说一下,我不能使用 DateTimeZoneDateTime 因为我正在处理 php < 5.3

最佳答案

我已经完成了这件事。它变得困惑。

我的解决方案是(如您建议的那样)将所有内容存储为 UTC,并在需要时将其转换为用户的时区。

我用 date.js 完成了主要的 JS 编码:http://www.datejs.com/ .

将服务器的 UTC 日期转换为用户本地的 UTC 日期

var d = new Date();
var offset = d.getTimezoneOffset();
var hours = parseInt(offset / -60);
var minutes = (offset % 60) * -1;

appointment_date = Date.parse(utc_date).add({minutes: minutes, hours:hours})

当然 utc_date 必须采用正确的格式 - 但使用 date_format mysql 函数应该很容易。

我总是将 UTC 日期和该日期的用户版本存储在数据库中 - 因此当我向他们发送电子邮件时,我不必根据他们的 TZ 进行计算

appointment_id   utc_date           user_date
1 2011-10-01 10:00 2011-10-01 16:00

我相信你明白了。

希望这对您有所帮助。

关于php - 我应该如何以一种可以可靠地用于转换为其他时区的方式在服务器端存储来自 JS 的时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7933445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com