Javascript使用momentjs在时区之间转换

Javascript使用momentjs在时区之间转换,javascript,node.js,datetime,timezone,momentjs,Javascript,Node.js,Datetime,Timezone,Momentjs,在我的应用程序中,用户选择日期+时间和时区。此选项必须显示给其所在时区的其他用户,这意味着如果来自纽约的用户A选择美国东部时间8月8日凌晨3:00,来自北京的用户B将看到此日期时间转换为中国标准时间(CST) 为此,我想-好吧,我保存用户A的日期,并告诉他从4个时区中选择一个。服务器端我使用矩时区将其从EDT选项转换为UTC,并将其保存为数据库中的UTC,以便在读取时,根据其他用户自己的时区将其转换回其他用户 这是一个正确的方法还是我把事情复杂化了?目的是用户A可以选择她想要的时区,数据库保存为

在我的应用程序中,用户选择日期+时间和时区。此选项必须显示给其所在时区的其他用户,这意味着如果来自纽约的用户A选择美国东部时间8月8日凌晨3:00,来自北京的用户B将看到此日期时间转换为中国标准时间(CST)

为此,我想-好吧,我保存用户A的日期,并告诉他从4个时区中选择一个。服务器端我使用矩时区将其从EDT选项转换为UTC,并将其保存为数据库中的UTC,以便在读取时,根据其他用户自己的时区将其转换回其他用户

这是一个正确的方法还是我把事情复杂化了?目的是用户A可以选择她想要的时区,数据库保存为标准化UTC,目标用户可以在自己的时区中看到

(顺便说一句,我在服务器端使用node.js)
谢谢,

您的方法是正确的:在数据库中保存UTC时间,并根据用户的时区将其显示给用户

momentjs
可以帮助您完成这项工作,但您需要为其提供历史时区更改文件

查看进一步的解释

一旦你有了这个,它就像

var jun = moment("2014-06-01T12:00:00Z");
jun.tz('America/Los_Angeles').format('ha z');  // 5am PDT

另外:不要将用户时区存储为EDT、CST或-6。班次会随着夏季、冬季的变化而变化。。您需要存储奥尔森格式“America/Los_Angeles”

什么是“标准化UTC”?你必须存储时区,不是吗?像
“CST”
-6
。你的方法绝对正确。@Rudie-是的,正确;我想我会将日期存储为UTC,并在一个单独的字段中输入时区“CST”。@ScottCramer谢谢!实际上,在用户时区中显示UTC日期/时间不需要太多帮助。只要您对使用用户机器的时区集来显示它感到满意,默认情况下,情况就是这样。例如,“新日期('2014-08-24 14:52:31Z')在印度的一台机器上使用
toString
打印时产生“Sun Aug 24 2014 20:22:31 GMT+0530(印度标准时间)”。@Jerome WAGNER-感谢您的回复;关于您最后的评论,我想我会这样做:存储“KST”,并在客户机上:if(KST)then moment.tz(utcDate,“亚洲/首尔”-这样行吗?@Amc_rtty不,我不会存储“KST”,因为KST通常被理解为特定的时间点(有时你有KDT)。通过使用地理地图(亚洲/首尔),你可以存储与特定时间点无关的东西(除非是指存储时间时用户所在的位置)。