具有本地支持的javascript datetimepicker

时间:2012-05-07 05:03:55

标签: javascript date time

我希望用户输入约会日期和时间,并在其前一小时向他发送提醒。

在服务器上我想以UTC格式存储日期时间,但在客户端上,用户将在当地时间输入日期时间。什么是处理这种转换的最佳方式? 是否有一个原生支持它的插件?

2 个答案:

答案 0 :(得分:2)

是的,有一个插件根据系统信息(jsTimezoneDetect)检测时区。实际上date - 对象本身存储了信息(但它有点像wierdo!)。

有一个interesting articlean interesting answer here on SO,值得一读!

  

不要在javascript中进行任何日期时间计算。你可能猜到了   浏览器时区定义它,但定义本身和所有   日期时间计算必须在时区感知系统中进行。

正如您将阅读本文,您将对javascript中的“date / dst / utc / timezones”问题有更深入的了解 - 因此,如果您告诉我们有关您服务器端的更多信息,那将会很有趣:

  • 您在服务器端使用哪个框架?
  • 您是否有任何逻辑来表示具有某些设置的帐户(例如自定义时区设置)?

“正确”方法(如果后面有后端,则是故障安全的)将是:让用户使用日期时间 - 在浏览器范围内它或多或少“未定义”(无需查找)时区,偏移或任何相似的东西!)。现在,您将此“未定义”日期时间信息提供给服务器(例如,将带有隐藏字段的unix-timestamp发送到服务器),您可以在其中获得用户所分配的实际时区的信息。因此,您现在可以将此“未定义”日期时间信息转换为服务器端的时区感知日期时间对象,并将帐户范围的信息分配给它(现在“未定义”日期时间对象具有本地时间--zone - 例如“太平洋夏令时”)。现在您可以轻松地进行任何所需的转换 这种方法的唯一缺点是,你将有两个定义时区的范围(用户操作系统和你的webapp) - 但其他任何东西都是摆弄而且不是故障安全的!

答案 1 :(得分:0)

向服务器发送时间戳可能是一个想法,使用getTimezoneOffset方法计算客户端的UTC日期/时间。要将其转换回客户端,您需要发送时间戳,创建一个虚拟日期客户端以确定当前时区偏移量(用户可能已移动到另一个时区!)并根据该信息创建客户端日期。客户端你会做类似的事情:

//[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));

Click here使用这个想法做一个简单的测试。