Как установить дату существующего объекта 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. Вы можете даже передать массив возможных масок, и момент попробует их всех, чтобы увидеть, может ли он понять исходную строку.