当前位置: 首页 > 面试题库 >

MomentJS在UTC中获取JavaScript日期

锺离德庸
2023-03-14
问题内容

我无法通过以下方式获取MongoDB记录的JavaScript Date字符串。它一直在使用我的当地时间。

var utc = moment.utc().valueOf();
console.log(moment.utc(utc).toDate());

输出:

Tue Nov 11 2014 14:42:51 GMT-0500 (EST)

我需要将其设置为UTC,因此我可以将时间戳记保留在Mongo中,所以键入为Date

我怎样才能做到这一点?


问题答案:

时间戳记是时间点。通常,这可以通过经过epoc(1970年1月1日,美国中部时间UTC的Unix
Epoc)后的毫秒数来表示。该时间点的格式取决于时区。虽然是同一时间点,但各个时区之间的“小时值”并不相同,因此必须考虑到与UTC的时差。

这是一些代码来说明。重要的是时间是通过三种不同的方式捕获的。

var moment = require( 'moment' );

var localDate = new Date();
var localMoment = moment();
var utcMoment = moment.utc();
var utcDate = new Date( utcMoment.format() );

//These are all the same
console.log( 'localData unix = ' + localDate.valueOf() );
console.log( 'localMoment unix = ' + localMoment.valueOf() );
console.log( 'utcMoment unix = ' + utcMoment.valueOf() );

//These formats are different
console.log( 'localDate = ' + localDate );
console.log( 'localMoment string = ' + localMoment.format() );
console.log( 'utcMoment string = ' + utcMoment.format() );
console.log( 'utcDate  = ' + utcDate );

//One to show conversion
console.log( 'localDate as UTC format = ' + moment.utc( localDate ).format() );
console.log( 'localDate as UTC unix = ' + moment.utc( localDate ).valueOf() );

哪个输出:

localData unix = 1415806206570
localMoment unix = 1415806206570
utcMoment unix = 1415806206570
localDate = Wed Nov 12 2014 10:30:06 GMT-0500 (EST)
localMoment string = 2014-11-12T10:30:06-05:00
utcMoment string = 2014-11-12T15:30:06+00:00
utcDate  = Wed Nov 12 2014 10:30:06 GMT-0500 (EST)
localDate as UTC format = 2014-11-12T15:30:06+00:00
localDate as UTC unix = 1415806206570

以毫秒为单位,每个都相同。它是完全相同的时间点(尽管在某些运行中,后一毫秒要高一点)。

就格式而言,每个都可以在特定时区中表示。而且,该时区字符串的格式看起来完全不同,而且时间完全相同!

您要比较这些时间值吗?只需转换为毫秒。一个毫秒值始终小于,等于或大于另一个毫秒值。

您是否要比较特定的“小时”或“天”值,并担心它们“来自”不同时区?首先使用转换为UTC moment.utc( existingDate ),然后进行操作。从数据库中出来时,这些转换console.log的示例是该示例中的最后一次调用



 类似资料:
  • 问题内容: 我在Java中的Date类遇到问题。日期类返回本地机器日期,但我需要UTC-0。 我已经在Google上搜索,找到了JavaScript的绝佳解决方案,但Java却没有任何用处。 如何在Java 8中获取UTC + 0日期? 问题答案: 使用Java 8,您可以编写: 要回答您的评论,您可以将其转换为日期(除非您依赖于旧代码,我看不见任何原因)或自时代以来转换为毫。

  • 问题内容: 在编写Web应用程序时,将 所有 日期时间(服务器端)存储在数据库中作为UTC时间戳是有意义的。 当我发现您无法在JavaScript中对时区进行操作方面自然无法做到这一点时,我感到非常惊讶。 我稍微扩展了Date对象。这个功能有意义吗?基本上,每次我向服务器发送任何内容时,都会使用该功能格式化时间戳记。 您在这里看到任何重大问题吗?还是从另一个角度解决问题? 在我看来,这有点令人费解

  • 问题内容: 如何在JavaScript中获取当前日期? 问题答案: 使用生成一个新的包含当前日期和时间对象。 这将以mm / dd / yyyy的格式给您今天的日期。 只需更改为所需的任何格式。

  • 问题内容: 数据库具有UTC中的数据,当我尝试获取数据时 这有什么问题吗? 问题答案: 您的DateFormat实例很可能以本地时间显示该值。在显示您的价值时,尝试一下: 编辑:对您的评论: 如果我使用GMT,那在SimpleDateFormat中会是一个问题吗? SimpleDateFormat可以使用常规时区(GMT +/- n),RFC822和文本(如JavaDoc所述,“如果它们具有名称”

  • 问题内容: 我有一个可在JavaScript中显示当前日期和时间的脚本,但这始终是错误的。这是代码: 它应该打印并打印 有什么帮助吗?谢谢 问题答案: 返回一个从零开始的数字,以便获得正确的月份,您需要将其加1,因此调用in可能会返回而不是。 因此,在您的代码中,我们可以用来输出正确的值。此外: 返回月中的某天 < -这是您想要的*那一天 * 是对象的单独方法,它将返回代表星期几(0-6)等的整数

  • 我正在使用React-Datepicker和MomentJS。但是当我想使用Moment设置starDate时,该值在datepickerfield中给出无效日期。 当我在控制台中记录this.state.start日期时,控制台会显示以下内容:“开始日期: 27-11-2018”,格式为“DD-MM-YYYY”。此格式也用于DatePicker组件。 有人能解释一下为什么它在浏览器中显示无效日期