Как установить дату существующего объекта moment.js

Скажем, у меня есть существующий моментный объект:

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

Но это выглядит уродливо для меня. Может быть, кто-то может предложить лучшее решение?

Ответ 1

Это может быть немного поздно, но вы можете преобразовать свою новую дату в объект (newDate.toObject()) и передать его методу set вашего предыдущего newDate.toObject() объекта:

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

Ответ 2

Просто используйте объект Date как параметр:

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

И voila, ваш объект момента установлен в то же время, что и ваш объект Date.

Ответ 3

  • например: 1 moment("01/01/2000", "DD/MM/YYYY")
  • например: 2 moment("01 Jan 2000")

для OP, заданной строкой, форматированной определенным образом, вы просто передаете строку и ее формат до момента, например:

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

Есть много вариантов маски, все они перечислены в файлах momentjs. Вы можете даже передать массив возможных масок, и момент попробует их всех, чтобы увидеть, может ли он понять исходную строку.