【发布时间】:2013-01-21 01:34:18
【问题描述】:
我遇到了一个常见问题,即使用 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 语言环境或浏览器的语言环境都可能会影响它并弄乱最终日期。任何有关确保一致的日期值的建议表示赞赏!
【问题讨论】:
-
我必须自己实现一个解决方案,这并不有趣,但我发现以下问题减少了:始终将所有内容存储为 UTC/GMT 以及单独的时区。尝试将时区附加到您在不知道是 UTC 的任何地方传递的任何日期。给用户一个下拉菜单来选择时区而不是尝试猜测,如果有任何尝试和猜测并将时区下拉菜单设置为猜测的区域,除非他们可以在某种用户设置页面或注册表单中明确设置它。不是一个真正的答案,但我希望它无论如何都会有所帮助。
-
有什么解决办法吗?
标签: php javascript mysql datepicker