【问题标题】:How to set Date of an existing moment.js object如何设置现有 moment.js 对象的日期
【发布时间】:2015-03-11 08:49:40
【问题描述】:

假设我有一个现有的时刻对象:

var m = moment(); // this will default to now

并想用一个新的 Date 对象更新它,但不替换整个对象。例如。这对我来说不是一个可接受的解决方案:

m = moment(new Date());

我可以在文档中找到的唯一解决方案是使用 set 方法:

m.set({'year': 2013, 'month': 3});

但是通过这种方式,我们需要将现有的 Date 对象拆分为如下所示的和平:

var myDate = new Date();
var newDate = moment(myDate);

var splittedDate = {
    year: newDate.get('year'),
    month: newDate.get('month'),
    date: newDate.get('date'),
    hour: newDate.get('hour'),
    minute: newDate.get('minute'),
    second: newDate.get('second'),
    millisecond: newDate.get('millisecond')
};

m.set(splittedDate);

但这在我看来很难看。也许有人可以提出更好的解决方案?

【问题讨论】:

  • 对我来说似乎很困惑。既然可以直接赋值,为什么还要更新 moment 对象。相反,您可以这样做 var m = moment(); var myDate = new Date(); m = 时刻(我的日期);现在 m 将拥有该日期的时刻对象。
  • 我在 Angular 中使用它,更改整个对象将触发我此时不需要的事件

标签: javascript momentjs


【解决方案1】:
  • 例如:1 moment("01/01/2000", "DD/MM/YYYY")
  • 例如:2 moment("01 Jan 2000")

对于 OP,给定一个以特定方式格式化的字符串,您只需将字符串及其格式传递给 moment,例如:

moment("01-01-2000 23:45", "DD-MM-YYYY HH:MM")

掩码有很多选项,这些都在 momentjs 文档中列出。您甚至可以传递一系列可能的掩码,并且时刻会尝试所有这些掩码,看看它是否可以理解您的原始字符串。

【讨论】:

  • moment("01-01-2000 23:45", "DD-MM-YYYY HH:MM", true) 可能有助于避免意外行为
  • 有趣 - 以前没见过那个开关。因此,通过传递 true 它“要求格式和输入完全匹配,包括分隔符”。 (momentjs.com/docs/#/parsing)。可能对某人有用,谢谢指出
【解决方案2】:

可能有点晚了,但您可以将新日期转换为对象 (newDate.toObject()) 并将其传递给上一时刻对象的 set 方法:

var m = moment(); // Initial moment object

// Create the new date
var myDate = new Date();
var newDate = moment(myDate);

// Inject it into the initial moment object
m.set(newDate.toObject());

【讨论】:

  • 谢谢。正是我想要的!应设置为正确答案。
  • 太棒了!这正是我要寻找的。​​span>
【解决方案3】:

只需使用您的Date 对象作为参数:

var d = new Date();
var m = moment(d);

,你的 moment 对象设置为与 Date 对象相同的时间。

【讨论】:

  • 感谢@Antoine 的回答,但是我更新了问题,我需要保留现有对象。
  • 我不明白你为什么不想创建一个新对象,但是除了 set 方法之外别无选择。
猜你喜欢
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 2021-10-09
  • 2018-11-01
  • 2017-08-25
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
相关资源
最近更新 更多