如何设置现有时刻.js对象的日期

How to set Date of an existing moment.js object

本文关键字:js 时刻 对象 日期 何设置 设置      更新时间:2023-09-26

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

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);

但这对我来说看起来很丑陋。也许有人可以提出更好的解决方案?

可能有点晚了,但您可以将新日期转换为对象( 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());
  • 例: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 会尝试所有掩码,看看它是否可以理解您的原始字符串。

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

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

,您的时刻对象设置为与日期对象相同的时间。