Hitung jumlah hari antara dua tanggal dengan momenjs

Saya menyimpan dua tanggal di dalam var (dibuat oleh pemilih tanggal). Untuk memformatnya saya menggunakan moments.js

Saya ingin menghitung jumlah hari antara dua bidang ini dan menyimpan nomor ini di dalam var days. Ini kode saya sejauh ini:

// When someone clicks my submit button, I create an url stored in the var url.
$(".book_submit").on('click', function(e){

  // I get the datepicker and input fields data
  var from = $('.from').val();
  var to = $('.to').val();

  // I can format the "from" var the way I want
  from  = moment(from, "DD.MM.YYYY");
  from = moment(from).format("YYYY-MM-DD");

  // I can format the "to" var the way I want
  to = moment(to, "DD.MM.YYYY");
  to = moment(to).format("YYYY-MM-DD");

  // I want to store the number between the two dates in the var "days", to place it inside my link below. I have found ".diff(to, 'days') in the moments documentation.

  //days = from.diff(to, 'days');   // =1

  var url = "https://mycustomlink&days= " + days + "";

});

Saya tidak bisa membuat from.diff(to, 'days') berfungsi dan menyimpannya di dalam variabel. Saya telah mencoba mengaturnya seperti:

var days = from.diff(to, 'days');

Bagaimana saya bisa menyimpan perbedaan antara hari-hari ini di dalam var days saya? Saya menghargai saran apa pun.


person Marian Rick    schedule 27.01.2016    source sumber


Jawaban (2)


Selain .diff(), Anda juga dapat menggunakan moment durations: http://momentjs.com/docs/#/durations/

Sunting: Tidak tahu apa yang saya pikirkan saat itu. Terima kasih @aedm telah menunjukkannya. Di sini tidak diperlukan durasi, yaitu untuk membuat rentang waktu.

.diff berfungsi sebagaimana mestinya, hanya saja Anda harus memastikan bahwa Anda menggunakan format yang benar untuk menguraikan tanggal.

Contoh Biola: https://jsfiddle.net/abhitalks/md4jte5d/

Contoh Cuplikan:

$("#btn").on('click', function(e) {
	var fromDate = $('#fromDate').val(), 
  		toDate = $('#toDate').val(), 
		from, to, druation;
  
	from = moment(fromDate, 'YYYY-MM-DD'); // format in which you have the date
	to = moment(toDate, 'YYYY-MM-DD');     // format in which you have the date
  
	/* using diff */
	duration = to.diff(from, 'days')     
	
	/* show the result */
	$('#result').text(duration + ' days');
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.1/moment.min.js"></script>
From: <input id="fromDate" type='date' />
To: <input id="toDate" type='date' />&nbsp;&nbsp;
<button id="btn">Submit</button><hr />
<p id="result"></p>


Seperti yang saya lihat di kode Anda, Anda memiliki komentar seperti ini:

// I can format the "from" var the way I want

Tidak. Anda tidak dapat memformat tanggal sesuai keinginan Anda. Anda harus menggunakan format tanggal yang Anda parsing. Dalam contoh saya, karena saya menggunakan tanggal HTML5, tanggal yang dikembalikan dalam format yyyy-mm-dd, oleh karena itu gunakan format tersebut. Dalam kasus Anda, tentukan format kotak teks Anda yang menampilkan tanggal, dan gunakan format itu.

Anda juga dapat menghilangkan format tersebut sama sekali, jika Anda yakin bahwa tanggal pengembalian menggunakan format standar.

person Abhitalks    schedule 27.01.2016
comment
Jawaban ini salah. Coba biola Anda dengan 01/10/2000 dan 02/11/2000. - person aedm; 20.06.2016
comment
Untuk memperjelasnya, duration.days() salah, karena ini hanya memberi Anda sebagian perbedaan hari. Namun, to.diff(from, 'days') berfungsi sebagaimana mestinya. - person aedm; 23.06.2016
comment
Terima kasih @aedm. Telah mengoreksi jawabannya. Entah apa yang kupikirkan saat itu :/ Pasti bangun larut malam dan mencampuradukkan sesuatu dari tempat lain!! Terima kasih sekali lagi, hal ini tidak akan luput dari perhatian jika bukan Anda. - person Abhitalks; 28.06.2016
comment
Terima kasih telah memperbaikinya. :) - person aedm; 28.06.2016

Untuk mendapatkan perbedaan dalam satuan pengukuran lain, teruskan pengukuran tersebut sebagai argumen kedua.

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days') // 1

Lihat ini untuk lebih lanjut

person WP Learner    schedule 27.01.2016
comment
Terima kasih atas saran Anda! Saya telah menemukan ini di dalam dokumentasi juga, tapi sejujurnya saya bahkan tidak tahu cara mengganti tanggal yang ditampilkan dalam contoh Anda dengan vars saya. Bisakah Anda membantu saya dengan itu? - person Marian Rick; 27.01.2016
comment
Variabel pertama adalah tahun, variabel kedua bulan, dan variabel ketiga tanggal. Jadi, Anda perlu memberikan dua nilai secara relatif. - person WP Learner; 27.01.2016