【问题标题】:Moment() vs predefined Moment() dateMoment() 与预定义的 Moment() 日期
【发布时间】:2017-01-29 22:42:28
【问题描述】:

我对 Moment 函数的工作原理有些困惑(例如 startOf()weekday() 等)。

我的问题是:如何从预定义的日期获取一周的开始时间?

考虑9/21/16 上的这两个调用:

moment().startOf('week') // Returns a moment object with date set to Sun Sep 18 2016 ...

moment(new Date("9/21/16")).startOf('week') // Returns a moment object with date set to Wed Sep 21 2016 ...

为什么它们的行为方式不同?使用weekday(0)而不是startOf('week')时也是如此

【问题讨论】:

  • moment(new Date("9/21/16")) 没有意义。使用库的全部意义在于帮助解析,所以不要使用内置的 Date 解析器(它非常不可靠,因此存在这么多解析器库)。使用moment('9/21/16','M/D/YY'),这也更少输入。

标签: javascript date datetime momentjs


【解决方案1】:

您不能简单地将 Date 构造函数与您喜欢的任何日期格式一起使用。例如,在我使用 Firefox 的系统上,new Date("9/21/16") 返回一个设置为 1916-09-20T22:00:00.000Z 的 Date 对象。

使用ISO 8601 格式,或者更好的是parse your string with Moment itself

moment("9/21/16", "MM/DD/YY")

【讨论】:

  • 你甚至可以使用new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]); 语法(但是它根本不流行,天知道为什么)。然后是时区问题。
  • 感谢您的建议。我对编程中的日期和时区没有太多经验,所以我绝对是新手。 Momentjs 似乎很有趣,并且很容易从创建日期或获取某些参数开始
  • @MichaelMurata 日期和时区是非常复杂的话题。遗憾的是,浏览器的实现在很多地方都不同,这就是 Moment 等库存在的原因,因此研究它确实是个好主意。
  • @Stijn 这正是我所听到的,这就是为什么我认为使用 Moment 之类的库将是一个很好的起点,而不是使用 Date 对象走我自己的路线
  • @Stijn — 日期和时区并不难,只是人们没有花时间学习与之相关的相当简单的规则。 javascript Date 设计不佳并且缺乏体面的解析和格式化(并且实现仍然存在错误,不符合标准并且非常不一致)并没有帮助。编写解析器、格式化程序和算术函数相当容易——但是当然周围有很好的库,所以不需要每个人都这样做。 ;-)。
【解决方案2】:

你怎么知道moment(new Date("9/21/16")).startOf('week') 正在返回Wed Sep 21 2016?您是否正在查看返回的对象?如果是这样,我认为您只是看到输入日期。您应该使用moment.format() 函数来获取实际日期:

// "September 18, 2016"
moment().startOf("week").format("LL");

// "September 18, 2016"
moment("9/21/16", "MM/DD/YY").startOf("week").format("LL");

// "September 18, 2016" on my system (not recommended)
moment(new Date("9/21/16")).startOf("week").format("LL");

【讨论】:

  • 目前所有的日期都存储在一个对象数组中,还有很多其他的东西。我会将 Moment 对象输出到控制台。您的第二个建议似乎可行,我想我只需要对其进行微调,使其遵循@Stijn 建议的某些格式
  • 是的。我已经更新了我的答案示例。现在是我的第三个建议。 :) 正如@Stijn 所说,它取决于系统。我的观点是,您应该使用 format 函数来获取实际日期,而不是查看返回的 Moment 对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 2020-09-04
  • 2021-09-13
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
相关资源
最近更新 更多