Отформатируйте дату и вычтите дни с помощью Moment.js


122

Я хотел бы, чтобы переменная DD-MM-YYYYсодержала вчерашнюю дату в формате с использованием Moment.js. Итак, если сегодня 15-04-2015, я хотел бы вычесть день и получить 14-4-2015.

Я пробовал несколько таких комбинаций:

startdate = moment().format('DD-MM-YYYY');
startdate.subtract(1, 'd');

и это:

startdate = moment().format('DD-MM-YYYY').subtract(1, 'd');

а также это:

startdate = moment();
startdate.subtract(1, 'd');
startdate.format('DD-MM-YYYY')

Но я не понимаю ...


Вы пробовали вычитать перед форматированием? Форматирование просто дает вам строку ...
ndugger

moment (). subtract (10, "days"), а не просто "d"?
леопик

«Сохраните» вчерашнюю дату как дату и превратите ее в форматированную строку, когда вам нужно ее отобразить.
Pointy

@NickDugger Я допустил ошибку в этом вопросе, последняя попытка должна сказать startdate = moment (); в первой строке. Ive отредактировал это сейчас, спасибо
beaumondo

format()это функция, которая делает его строкой. Вы должны сделать это в последнюю очередь.
jwatts1980

Ответы:


211

У вас происходит множество странностей. Первый был отредактирован в вашем сообщении, но он был связан с порядком, в котором вызывались методы.

.formatвозвращает строку. Строка не имеет subtractметода.

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

Тогда ваш код должен выглядеть так:

var startdate = moment();
startdate = startdate.subtract(1, "days");
startdate = startdate.format("DD-MM-YYYY");

Однако вы можете связать это вместе; это будет выглядеть так:

var startdate = moment().subtract(1, "days").format("DD-MM-YYYY");

Разница в том, что мы устанавливаем startdate для изменений, которые вы делаете в startdate, потому что момент разрушителен.


13
moment.js subtractна самом деле деструктивен. «Изменяет исходный момент, вычитая время». Смотрите здесь: momentjs.com/docs/#/manipulating/subtract
docksteaderluke


5

Попробуй это:

var duration = moment.duration({'days' : 1});
moment().subtract(duration).format('DD-MM-YYYY');

Это даст вам 14-04-2015- сегодня 15-04-2015

В качестве альтернативы, если ваша версия momentjs меньше 2.8.0, вы можете использовать:

startdate = moment().subtract('days', 1).format('DD-MM-YYYY');

Вместо этого:

startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');


3
var date = new Date();

var targetDate = moment(date).subtract(1, 'day').toDate(); // date object

Теперь вы можете отформатировать, как вы хотите видеть эту дату, или вы можете сравнить эту дату с другой и т. Д.

Функция toDate () - вот в чем дело.


2

Я думаю, вы получили это в последней попытке, вам просто нужно схватить строку .. в консоли Chrome ..

startdate = moment();
startdate.subtract(1, 'd');
startdate.format('DD-MM-YYYY');
"14-04-2015"

startdate = moment();
startdate.subtract(1, 'd');
myString = startdate.format('DD-MM-YYYY');
"14-04-2015"
myString
"14-04-2015"

2

В угловом моменте = "^ 1.3.0"

moment('15-01-1979', 'DD-MM-YYYY').subtract(1,'days').format(); //14-01-1979
or
moment('15-01-1979', 'DD-MM-YYYY').add(1,'days').format(); //16-01-1979
``


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.