javascript datetimepicker with local support
我希望用户输入约会日期和时间,并在它前一小时向他发送提醒。
在服务器上,我想以UTC格式存储日期时间,但在客户端上,用户将在当地时间输入日期时间。 什么是处理这种转换的最佳方式?
是否有一个原生支持这个插件?
是的,有一个插件可以根据系统信息(jsTimezoneDetect)检测时区。实际上一个
在SO上有一篇有趣的文章和一个有趣的答案,值得一读!
Don’t do any date-time computations in javascript. You may guess the
browsers time zone to define it, but the definition itself and all
date-time computations must be made in a time-zone aware system.
正如您将阅读本文,您将更深入地了解问题"javascript中的date / dst / utc / timezones" - 因此,如果您告诉我们有关您服务器端的更多信息,那将会很有趣:
- 您在服务器端使用哪个框架?
- 您是否有任何使用某些设置来表示帐户的逻辑(例如自定义时区设置)?
"正确"方法(如果后面有后端,则是故障安全的)将是:让用户使用日期时间 - 在浏览器范围内,它或多或少"未定义"(无需查找时区,抵消,或任何相似!)。现在,您将此"未定义"日期时间信息提供给服务器(例如,将带有隐藏字段的unix-timestamp发送到服务器),您可以在其中获得用户所分配的实际时区的信息。因此,您现在可以将此"未定义"日期时间信息转换为服务器端的时区感知日期时间对象,并将帐户范围的信息分配给它(现在"未定义"日期时间对象具有本地时间--zone - 例如"太平洋夏令时")。现在您可以轻松地进行任何所需的转换。
这种方法的唯一缺点是,你将有两个定义时区的范围(用户操作系统和你的webapp) - 但其他任何东西都是摆弄而不是故障安全的!
向服务器发送时间戳可能是一个想法,使用
1 2 3 4 5 6 7 8 | //[client side send] var d = new Date(), //now offset = d.getTimezoneOffset() UTCTimeStamp = d.getTime()+(60000*offset); // send to server //[client side receive] var offset = 60000*new Date().getTimezoneOffset(), localDate = new Date(timestamp + (offset < 0 ? Math.abs(offset) : -offset)); |
点击这里使用这个想法做一个简单的测试。