3

我遇到了使用 javascript datepicker 显示并允许用户从可用日程安排日期的日历中选择日期以进行房间预订的常见问题。

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

我希望用户的浏览器忽略 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 语言环境或浏览器的语言环境都可能会影响它并弄乱最终日期。任何有关确保一致的日期值的建议表示赞赏!

4

1 回答 1

1

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

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

你如何在 UI 中呈现日期并不那么简单,而且有点取决于目标受众、应用程序性质等。我认为这更像是一个讨论的主题,在 Stack Overflow 中有点无法回答(还有其他用于主观思考的论坛)。

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

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

编辑:我应该补充一点,作为一个例子,这会变得多么多毛,有时一次只是一次。在某些情况下,15:00 发生的事件可能意味着它发生在 15:00 在不同的地方,在各自的当地时区。呃……

于 2013-02-06T00:22:01.620 回答