Відформатуйте дату та відніміть дні за допомогою Moment.js


121

Я хотів би, щоб змінна 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

момент (). відняти (10, "днів"), а не просто "d", можливо?
leopik

"Затримайте" вчорашню дату як дату та перетворіть її у відформатований рядок, коли потрібно відобразити її.
Пойні

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

format()це функція, яка робить його рядком. Вам слід це зробити останнім.
jwatts1980

Відповіді:


210

У вас трапляються численні дивацтва. Перший був відредагований у вашій публікації, але це було пов'язане з порядком виклику методів.

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

Різниця полягає в тому, що ми встановлюємо початкові дати для змін, які ви робите на стартовій даті, оскільки момент є руйнівним.


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


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
``




2
var date = new Date();

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

Тепер ви можете відформатувати, як ви хочете побачити цю дату, або можете порівняти цю дату з іншою тощо.

Точка функція toDate () .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.