JavaScript DateTimepicker 与本地支持

javascript datetimepicker with local support

本文关键字:支持 DateTimepicker JavaScript      更新时间:2023-09-26

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

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

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

SO上有一篇有趣的文章和一个有趣的答案,值得一读!

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

当您阅读本文时,您将对"javascript 中的日期/dst/utc/时区"问题有更深入的了解 - 因此,如果您告诉我们更多关于您的服务器端的信息,那将很有趣:

  • 您在服务器端使用哪个框架?
  • 您是否有任何逻辑可以使用某些设置(例如自定义时区设置(重新设置帐户?

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

使用 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));

单击此处使用此想法进行简单测试。