Format tanggal dan Kurangi hari menggunakan Moment.js

121

Saya ingin variabel untuk menampung tanggal kemarin dalam format DD-MM-YYYYmenggunakan Moment.js. Jadi jika hari ini adalah 15-04-2015, saya ingin mengurangi satu hari dan memiliki 14-4-2015.

Saya sudah mencoba beberapa kombinasi seperti ini:

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

dan ini:

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

dan juga ini:

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

Tapi saya tidak mengerti ...

beaumondo
sumber
Sudahkah Anda mencoba mengurangi sebelum memformat? Memformatnya hanya memberi Anda string ...
ndugger
moment (). kurangi (10, "hari") daripada hanya "d" mungkin?
leopik
"Tahan" tanggal kemarin sebagai tanggal , dan ubah menjadi string yang diformat saat Anda perlu menampilkannya.
Pointy
@NickDugger saya membuat kesalahan dalam pertanyaan itu upaya terakhir harus mengatakan startdate = moment (); di baris pertama. Saya sudah mengeditnya sekarang, terima kasih
beaumondo
format()adalah fungsi yang membuatnya menjadi string. Anda harus melakukannya terakhir.
jwatts1980

Jawaban:

210

Ada banyak keanehan yang terjadi. Yang pertama telah diedit di posting Anda, tetapi itu berkaitan dengan urutan pemanggilan metode.

.formatmengembalikan sebuah string. String tidak memiliki subtractmetode.

Masalah kedua adalah Anda mengurangi hari, tetapi tidak benar-benar menyimpannya sebagai variabel.

Kode Anda, kemudian, akan terlihat seperti:

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

Namun, Anda bisa menyatukannya; ini akan terlihat seperti:

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

Perbedaannya adalah kami menyetel tanggal mulai ke perubahan yang Anda lakukan pada tanggal mulai, karena momen merusak.

ndugger
sumber
13
moment.js subtract, pada kenyataannya, merusak. "Mutasi momen asli dengan mengurangi waktu". Lihat di sini: momentjs.com/docs/#/manipulating/subtract
docksteaderluke
11
startdate = moment().subtract(1, 'days').format('DD-MM-YYYY');
M. Adam Kendall
sumber
5

Coba ini:

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

Ini akan memberi Anda 14-04-2015- hari ini adalah 15-04-2015

Atau jika versi momentjs Anda kurang dari 2.8.0, Anda dapat menggunakan:

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

Daripada ini:

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

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

Jethik
sumber
2

Saya pikir Anda sudah mendapatkannya dalam upaya terakhir, Anda hanya perlu mengambil string .. di konsol 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.dll
sumber
2

Dalam momen angularjs = "^ 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
``


Raphael Vitor
sumber
2
var date = new Date();

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

Sekarang, Anda dapat memformat bagaimana Anda ingin melihat tanggal ini atau Anda dapat membandingkan tanggal ini dengan tanggal lain dll.

fungsi toDate () adalah intinya.

canmustu
sumber