जवाबों:
यहां एक तरीका यह है कि एक दिन को जोड़ने के तरीके का उपयोग करके तारीख को अगले महीने तक रोल करने का कारण बनता है यदि आवश्यक हो, और बिना मिलीसेकंड के साथ गड़बड़ किए बिना। डेलाइट बचत कोई समस्या नहीं है।
var now = new Date();
var daysOfYear = [];
for (var d = new Date(2012, 0, 1); d <= now; d.setDate(d.getDate() + 1)) {
daysOfYear.push(new Date(d));
}
ध्यान दें कि यदि आप तारीख को स्टोर करना चाहते हैं, तो आपको एक नया (जैसा कि ऊपर दिया गया है new Date(d)
) बनाने की आवश्यकता होगी , या फिर आप हर संग्रहीत तिथि d
को लूप में अंतिम मान होने के साथ समाप्त करेंगे ।
Date.now()
परिभाषित करते समय क्यों करते हैं now
? new Date()
डिफ़ॉल्ट रूप से वर्तमान दिनांक को ऑब्जेक्ट के रूप में देता है । कंस्ट्रक्टर के Date
बिना कॉल करने से new
आपको एक डेट स्ट्रिंग मिलती है जिसे आप फिर डेट ऑब्जेक्ट में बदल देते हैं?
new Date(2012, 0, 1);
लिए गलत दिन उठा रहा था (एक दिन पहले), new Date(Date.UTC(2012, 0, 1))
ठीक काम किया।
टॉम गुलेन के उत्तर के आधार पर।
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);
}
यदि प्रारंभ और अंतिम तिथि वास्तव में दिनांक ऑब्जेक्ट हैं तो आप उन्हें आधी रात के बाद से 1, 1970 की संख्या में मिलिसेकंड की संख्या में बदल सकते हैं:
var startTime = startDate.getTime(), endTime = endDate.getTime();
तब आप 86400000 (1000 * 60 * 60 * 24) - एक दिन में मिलीसेकंड की संख्या से एक से बढ़ कर लूप टाइम तक लूप कर सकते हैं:
for(loopTime = startTime; loopTime < endTime; loopTime += 86400000)
{
var loopDay=new Date(loopTime)
//use loopDay as you wish
}
86400000
एक दिन में कुछ सेकंड हैं। यह लूप दिन के उजाले बचत परिवर्तन और अन्य किनारे की स्थिति के लिए नाजुक है।
मुझे लगता है कि मुझे और भी सरल उत्तर मिला, यदि आप खुद को 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>
यहाँ सरल काम कोड, मेरे लिए काम किया
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
}
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
}
तबरेज के जवाब के आधार पर, मुझे अंत में एक दिन और जोड़ना था, क्योंकि चक्र पहले काटा जाता है
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);
}
यदि आप मिलीसेकंड के साथ एक कुशल तरीका चाहते हैं:
var daysOfYear = [];
for (var d = begin; d <= end; d = d + 86400000) {
daysOfYear.push(new Date(d));
}
आइए मान लें कि आपको यूआई से आरंभ तिथि और समाप्ति तिथि मिली और इसे नियंत्रक में गुंजाइश चर में संग्रहीत किया गया।
फिर एक ऐरे की घोषणा करें जो हर फ़ंक्शन कॉल पर रीसेट हो जाएगा ताकि फ़ंक्शन के लिए अगले कॉल पर नया डेटा संग्रहीत किया जा सके।
var dayLabel = [];
नई तिथि (अपना आरंभिक चर) का उपयोग करना याद रखें क्योंकि यदि आप नई तिथि का उपयोग नहीं करते हैं और सीधे सेट चर पर असाइन करते हैं, तो प्रत्येक पुनरावृति में मूल चर मान बदल जाएगा
for (var d = new Date($scope.startDate); d <= $scope.endDate; d.setDate(d.getDate() + 1)) {
dayLabel.push(new Date(d));
}
Jayarjo के जवाब पर आधारित:
var loopDate = new Date();
loopDate.setTime(datFrom.valueOf());
while (loopDate.valueOf() < datTo.valueOf() + 86400000) {
alert(loopDay);
loopDate.setTime(loopDate.valueOf() + 86400000);
}