具有本地支持的javascript日期时间选择器
我希望用户输入约会日期和时间,并在约会前一小时向他发送提醒 在服务器上,我希望以UTC格式存储日期时间,但在客户端,用户将以其本地时间输入日期时间。处理这种转换的最佳方法是什么?具有本地支持的javascript日期时间选择器,javascript,date,time,Javascript,Date,Time,我希望用户输入约会日期和时间,并在约会前一小时向他发送提醒 在服务器上,我希望以UTC格式存储日期时间,但在客户端,用户将以其本地时间输入日期时间。处理这种转换的最佳方法是什么? 是否有本机支持此功能的插件?是的,有一个插件可以根据系统信息检测时区()。实际上,date-对象本身存储信息(但它有点像wierdo!) 有一个和,值得一读 不要在javascript中进行任何日期时间计算。你可以猜出答案 浏览器可以定义时区,但定义本身和所有 日期时间计算必须在时区感知系统中进行 在阅读本文时,您将对
是否有本机支持此功能的插件?是的,有一个插件可以根据系统信息检测时区()。实际上,
date
-对象本身存储信息(但它有点像wierdo!)
有一个和,值得一读
不要在javascript中进行任何日期时间计算。你可以猜出答案
浏览器可以定义时区,但定义本身和所有
日期时间计算必须在时区感知系统中进行
在阅读本文时,您将对“javascript中的日期/dst/utc/时区”问题有更深入的了解,因此,如果您能告诉我们有关服务器端的更多信息,将会非常有趣:
- 您在服务器端使用哪种框架
- 您是否有使用某些设置(例如自定义时区设置)表示帐户的逻辑
这种方法唯一的缺点是,你将有两个定义时区的范围(用户和你的webapp的操作系统)-但其他任何东西都是摆弄和不安全的 最好向服务器发送时间戳,使用
getTimezoneOffset
方法计算UTC日期/时间客户端。要将其转换回客户端,您需要发送时间戳,创建一个虚拟日期客户端以确定currend时区偏移量(用户可能已移动到另一个时区!),并根据该信息创建客户端日期。客户端您可以执行以下操作:
//[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));
//[客户端发送]
var d=新日期(),//现在
offset=d.getTimezoneOffset()
UTCTimeStamp=d.getTime()+(60000*偏移量);//发送到服务器
//[客户端接收]
var offset=60000*新日期()。getTimezoneOffset(),
localDate=新日期(时间戳+(偏移量<0?数学abs(偏移量):-offset));
使用这个想法做一个简单的测试。这可能会有帮助,这有一个主要问题:如果你在dst时区,你会得到不同日期的不同时区偏移。。。例如,2012-01-01带有+1,而2012-05-07带有+2。现在。。。“+2”可以是带或不带dst的时区…顺便说一句,
.getTimezoneOffset()
的结果在minutes@Andreas:请尝试我答案中的链接。客户端向我的服务器发送UTC时间戳,服务器返回时间戳,并处理客户端到客户端时区中的日期/时间。有趣的指针。因此,如果我理解正确,我可以将一个隐藏字段发送到服务器,该服务器根据用户输入的日期和时间计算从epoch开始的正确毫秒数。一种方法是使用jsTimezoneDetect文件添加偏移量。如果我使用新的日期(年、月、日、小时、分、秒、毫秒),这会自动处理offest吗?实际上。。。对我们就是这样做的:让用户说‘2012-01-01 12:30:00’(好的……正确的……不是字符串,而是日期对象)。现在,我们将其转换为unix时间戳(此转换取决于操作系统设置),并将其发送到服务器,在服务器上我们将其转换为System.DateTime
,并使用用户自己提供的时区信息将其设置为“local”。现在,我们可以转换为真正的UTC,并进行任何转换。如果我们需要显示一些日期时间(总是存储在UTC中),我们将转换为显示用户的本地值。