Diberikan dua Date()
objek, di mana satu lebih kecil dari yang lain, bagaimana cara saya mengulang setiap hari di antara tanggal?
for(loopDate = startDate; loopDate < endDate; loopDate += 1)
{
}
Apakah pengulangan semacam ini akan berhasil? Tapi bagaimana saya bisa menambahkan satu hari ke penghitung loop?
Terima kasih!
javascript
date
loops
Tom Gullen
sumber
sumber
Date.now()
saat mendefinisikannow
?new Date()
mengembalikan tanggal saat ini sebagai objek secara default . MemanggilDate
tanpanew
konstruktor hanya memberi Anda string Tanggal yang kemudian Anda ubah menjadi objek Tanggal?new Date(2012, 0, 1);
mengambil hari yang salah (sehari sebelumnya),new Date(Date.UTC(2012, 0, 1))
bekerja dengan baik.Berdasarkan jawaban Tom Gullen.
var start = new Date("02/05/2013"); var end = new Date("02/10/2013"); var loop = new Date(start); while(loop <= end){ alert(loop); var newDate = loop.setDate(loop.getDate() + 1); loop = new Date(newDate); }
sumber
Date
adalah pengembangSaya rasa saya menemukan jawaban yang lebih sederhana, jika Anda membiarkan diri Anda menggunakan Moment.js :
// cycle through last five days, today included // you could also cycle through any dates you want, mostly for // making this snippet not time aware const currentMoment = moment().subtract(4, 'days'); const endMoment = moment().add(1, 'days'); while (currentMoment.isBefore(endMoment, 'day')) { console.log(`Loop at ${currentMoment.format('YYYY-MM-DD')}`); currentMoment.add(1, 'days'); }
<script src="https://cdn.jsdelivr.net/npm/moment@2/moment.min.js"></script>
sumber
Jika startDate dan endDate memang objek tanggal, Anda dapat mengonversinya ke dalam milidetik sejak tengah malam 1 Jan 1970, seperti ini:
var startTime = startDate.getTime(), endTime = endDate.getTime();
Kemudian Anda dapat melakukan loop dari satu ke yang lain dengan menambahkan loopTime sebanyak 86400000 (1000 * 60 * 60 * 24) - jumlah milidetik dalam satu hari:
for(loopTime = startTime; loopTime < endTime; loopTime += 86400000) { var loopDay=new Date(loopTime) //use loopDay as you wish }
sumber
86400000
detik dalam sehari. Loop ini rentan terhadap perubahan penghematan siang hari dan kondisi edge lainnya.Di sini kode kerja sederhana, bekerja untuk saya
var from = new Date(2012,0,1); var to = new Date(2012,1,20); // loop for every day for (var day = from; day <= to; day.setDate(day.getDate() + 1)) { // your day is here }
sumber
var start = new Date("2014-05-01"); //yyyy-mm-dd var end = new Date("2014-05-05"); //yyyy-mm-dd while(start <= end){ var mm = ((start.getMonth()+1)>=10)?(start.getMonth()+1):'0'+(start.getMonth()+1); var dd = ((start.getDate())>=10)? (start.getDate()) : '0' + (start.getDate()); var yyyy = start.getFullYear(); var date = dd+"/"+mm+"/"+yyyy; //yyyy-mm-dd alert(date); start = new Date(start.setDate(start.getDate() + 1)); //date increase by 1 }
sumber
Berdasarkan Jawaban Tabare, saya harus menambahkan satu hari lagi di akhir, karena siklus terputus sebelumnya
var start = new Date("02/05/2013"); var end = new Date("02/10/2013"); var newend = end.setDate(end.getDate()+1); var end = new Date(newend); while(start < end){ alert(start); var newDate = start.setDate(start.getDate() + 1); start = new Date(newDate); }
sumber
Jika Anda menginginkan cara yang efisien dengan milidetik:
var daysOfYear = []; for (var d = begin; d <= end; d = d + 86400000) { daysOfYear.push(new Date(d)); }
sumber
Mari kita asumsikan Anda mendapatkan tanggal mulai dan tanggal akhir dari UI dan menyimpannya dalam variabel cakupan di pengontrol.
Kemudian mendeklarasikan sebuah array yang akan direset pada setiap pemanggilan fungsi sehingga pada pemanggilan fungsi berikutnya data baru dapat disimpan.
var dayLabel = [];
Ingatlah untuk menggunakan Tanggal baru (variabel awal Anda) karena jika Anda tidak menggunakan tanggal baru dan langsung menetapkannya ke variabel, fungsi setDate akan mengubah nilai variabel asal di setiap iterasi`
for (var d = new Date($scope.startDate); d <= $scope.endDate; d.setDate(d.getDate() + 1)) { dayLabel.push(new Date(d)); }
sumber
Berdasarkan jawaban Jayarjo:
var loopDate = new Date(); loopDate.setTime(datFrom.valueOf()); while (loopDate.valueOf() < datTo.valueOf() + 86400000) { alert(loopDay); loopDate.setTime(loopDate.valueOf() + 86400000); }
sumber