javascript显示中的时区偏移量


timezone offset in javascript display

我遇到了一个常见的问题,那就是使用javascript日期选择器来显示并允许用户从房间预订的可用日程日期日历中选择日期。

浏览器的时区转换意味着这些日期总是在一定程度上偏离,因此,当向用户显示保留日期时,当服务器(存储在数据库中的资产或房间的本地时区)将其显示为"今天"时,日期通常会落在查看器的"明天"。

我希望用户的浏览器忽略javascript日期转换,只使用数据库传入的实际日期时间。

然而,这种情况甚至发生在一个非常简单的例子上,比如

var date = '2013-02-05';
var newdate = new Date(date);
console.log(newdate); // Mon Feb 04 2013 16:00:00 GMT-0800 (PST) 

浏览器似乎假定date变量为GMT,当我从中创建一个javascript日期对象时,它会将该GMT时间转换为我的本地时间。

在这种情况下,最佳做法是在数据库中使用GMT日期,并将网站的本地时间偏移设置为javascript中的一个变量,然后可以使用该变量来偏移显示给最终用户的日期,并再次偏移从最终用户收到的插入数据库的日期吗?

这是令人困惑的,因为有太多潜在的陷阱——PHP区域设置、mysql区域设置或浏览器的区域设置都可能会影响最终日期。任何关于确保日期价值一致的建议都将不胜感激!

好问题,处理时区是一团糟。幸运的是,Javascript的大多数方法都有UTC变体。看见http://en.wikipedia.org/wiki/Coordinated_Universal_Time

我认为最好的方法是在任何地方使用UTC日期(UI可能除外)。确保服务器使用并存储UTC日期,并在任何地方使用javascript UTC方法。这是第一步,也是最重要的一步,所以你知道日期是一致的。

如何在UI中显示日期就不那么简单了,这在某种程度上取决于目标受众、应用程序性质等。我认为这更多是一个讨论的主题,在Stack Overflow中也有点无法回答(还有其他论坛可以进行主观思考)。

我想说的是,不要相信浏览器或任何类型的地理位置可以自动转换时区;它应该是用户可配置的,或者可能是特定于组/项目/安装的设置。有些软件主要在一个时区内使用,如果用户使用某个"标准"时间进行通信,那么尝试自动转换时区可能会让用户感到困惑和烦恼。如果用户正在旅行,是否应该查看不同时区的时间?有时这是有道理的,有时不是,但至少要确保用户知道你在阅读和输入时间时遵循的逻辑。

我开发的项目管理软件非常重要,这些事情由应用程序和用户明确地bot处理(!)。我的方法是始终强制UTC进行显示和输入。在每个日期都可以清楚地看到它是UTC。处理各种时区会很快变得棘手,我决定最好不要这样做。我在UI的某些部分有一些助手,它们在用户本地时区等中以精细的字体显示相同的信息。有一个项目范围的设置,可以"隐藏所有与时区相关的东西,并强制使用时区x",这可以用于已知永远不会跨越时区边界的较小项目,有使用特定区域的协议,或者这只是一个既定的设置,最好不要用这种复杂性打扰用户。

编辑:我应该补充一点,作为一个例子,有时一次只是一次。在某些情况下,15:00的事件可能意味着15:00发生在不同的地方,在各自的本地时区。嗯。。。。