Отформатируйте дату и вычтите дни с помощью 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')

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

beaumondo
источник
Вы пробовали вычитать перед форматированием? Форматирование просто дает вам строку ...
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, потому что момент разрушителен.

ndugger
источник
13
moment.js subtractна самом деле деструктивен. «Изменяет исходный момент, вычитая время». Смотрите здесь: momentjs.com/docs/#/manipulating/subtract
docksteaderluke
11
startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');
М. Адам Кендалл
источник
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

startdate = moment().subtract(1, 'days').startOf('day')

Jethik
источник
3
var date = new Date();

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

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

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

canmustu
источник
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"
lecstor
источник
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
``


Рафаэль Витор
источник