Javascript 将日期和时间转换为UTC

Javascript 将日期和时间转换为UTC,javascript,datetime,momentjs,datetime-format,Javascript,Datetime,Momentjs,Datetime Format,我要求用户在我的应用程序中输入日期和时间。用户将根据所在时区输入时间。当我将此日期和时间保存到数据库时,我希望将时间转换为UTC,以便在按时间查询时(以UTC完成)可以找到条目 这就是我目前所做的: var date = new Date(); var dateString = "0" + (date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear() + " " + time; //format date date

我要求用户在我的应用程序中输入日期和时间。用户将根据所在时区输入时间。当我将此日期和时间保存到数据库时,我希望将时间转换为UTC,以便在按时间查询时(以UTC完成)可以找到条目

这就是我目前所做的:

var date = new Date();
var dateString = "0" + (date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear() + " " + time;
//format date
date = moment(dateString, "MM/DD/YYYY HH:mm a");
date = new Date(date).toISOString();
其中time是用户输入的时间(例如,如果我想安排11:00am的时间,time=11:00am)

将其保存到数据库时,看起来如下所示:
ISODate(“2016-05-09T11:00:00Z”)
不正确,因为这是保存为祖鲁时间的EST


如何将时间(我使用的是时刻)转换为正确的祖鲁时间?

一个选项是使用Javascript内置的UTC函数

比如说,

new Date('2016-05-09 10:00:00')
    returns Mon May 09 2016 10:00:00 GMT-0400

new Date('2016-05-09 10:00:00').getUTCHours()
    returns 14
更新:示例(包括.toISOString())

如果我们选择2016年7月4日东部时间晚上8:00(GMT-0400),UTC将是2016年7月5日午夜00:00:


一种选择是使用Javascript的内置UTC函数

比如说,

new Date('2016-05-09 10:00:00')
    returns Mon May 09 2016 10:00:00 GMT-0400

new Date('2016-05-09 10:00:00').getUTCHours()
    returns 14
更新:示例(包括.toISOString())

如果我们选择2016年7月4日东部时间晚上8:00(GMT-0400),UTC将是2016年7月5日午夜00:00:


为了解决这个问题,我使用了矩时区库

我首先在服务器上设置时区,因为只有EST才能访问它:

moment.tz.setDefault("America/New_York");
然后,我需要做的就是通过以下方式将矩对象上的时区设置为UTC:

date = moment(dateString, "MM/DD/YYYY HH:mm a").tz("UTC");

这成功地将时间从EST转换为UTC

为了解决这个问题,我使用了矩时区库

我首先在服务器上设置时区,因为只有EST才能访问它:

moment.tz.setDefault("America/New_York");
然后,我需要做的就是通过以下方式将矩对象上的时区设置为UTC:

date = moment(dateString, "MM/DD/YYYY HH:mm a").tz("UTC");

这成功地将时间从EST转换为UTC

,因为您手动调用了toISOString(),它看起来会有什么不同?@RegisPortalez它看起来不像toISOString()正在改变任何东西自从您手动调用toISOString(),它看起来会有什么不同?@RegisPortalez它看起来不像toISOString()正在更改任何内容这并不能真正帮助我将时间输入转换为UTC时间…这允许我以UTC获取当前时间…但如果用户输入上午11:00,则获取UTC小时数将只是以UTC表示的当前时间。也许我不明白这个问题。如果用户输入未来的日期和时间(假设是计划过程),则可以根据该输入创建日期对象。例如,7月4日晚上8:00将是“var日期=新日期('2016-07-04 20:00:00')”。如果我使用这些函数,我可以让每个UTC组件基于UTC创建一个新的日期对象。根据其他注释,.toISOString()在您是有效的日期对象时也起作用。我将用示例更新我的答案。我只是解析一个字符串输入并从中创建一个日期。因此,如果用户输入8:00pm,我会得到字符串8:00pm,需要将其转换为UTCI,UTCI能够使用矩时区解决我的问题。但你的小提琴也能用。我会的,谢谢。很高兴您找到了解决方案。这并不能真正帮助我将时间输入转换为UTC时间…这允许我以UTC获取当前时间…但如果用户输入上午11:00,则获取UTC小时数将只是UTCSorry中的当前时间。也许我不明白这个问题。如果用户输入未来的日期和时间(假设是计划过程),则可以根据该输入创建日期对象。例如,7月4日晚上8:00将是“var日期=新日期('2016-07-04 20:00:00')”。如果我使用这些函数,我可以让每个UTC组件基于UTC创建一个新的日期对象。根据其他注释,.toISOString()在您是有效的日期对象时也起作用。我将用示例更新我的答案。我只是解析一个字符串输入并从中创建一个日期。因此,如果用户输入8:00pm,我会得到字符串8:00pm,需要将其转换为UTCI,UTCI能够使用矩时区解决我的问题。但你的小提琴也能用。我会的,谢谢。很高兴你找到了解决办法。