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


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.


13
moment.js subtract, pada kenyataannya, merusak. "Mutasi momen asli dengan mengurangi waktu". Lihat di sini: momentjs.com/docs/#/manipulating/subtract
docksteaderluke


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

3

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


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"

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



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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.