2010-12-03 18 views
92

दो दिनांक() ऑब्जेक्ट्स को देखते हुए, जहां एक दूसरे से कम है, मैं तारीखों के बीच हर दिन कैसे लूप करता हूं?दिनांक सीमा के बीच जावास्क्रिप्ट लूप

for(loopDate = startDate; loopDate < endDate; loopDate += 1) 
{ 

} 

पाश काम की इस तरह चाहेंगे? लेकिन मैं लूप काउंटर में एक दिन कैसे जोड़ सकता हूं?

धन्यवाद!

उत्तर

120

एक दिन जोड़ने के तरीके का उपयोग करके इसे अगले महीने तक रोल करने का कारण बनता है, और यदि आवश्यक हो तो मिलीसेकंड के साथ गड़बड़ किए बिना। डेलाइट बचत या तो कोई मुद्दा नहीं है।

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

+0

अन्य सभी उत्तरों की तुलना में बहुत अधिक पठनीय। प्रत्येक लूप 86400000 मिलीसेकंड जोड़ना बहुत पठनीय नहीं है। – Owen

+1

डेलाइट सेविंग टाइम्स से सावधान रहें। d.getDate() + 1 जब d.getDate() = जीएमटी एन और डी .getडेट() + 1 = जीएमटी एन -1 डी।GetDate() + 1 महीने के उसी दिन दो बार लौटाता है। –

+1

'अब' को परिभाषित करते समय 'Date.now()' क्यों करें? 'नई तिथि()' [वर्तमान तिथि को डिफ़ॉल्ट रूप से ऑब्जेक्ट के रूप में लौटाती है] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)। 'नया' कन्स्ट्रक्टर के बिना 'डेट' को कॉल करना सिर्फ आपको एक दिनांक स्ट्रिंग देता है जिसे आप फिर किसी डेट ऑब्जेक्ट में कनवर्ट करते हैं? – tatlar

9

StartDate और EndDate वास्तव में तारीख वस्तुओं आप आधी रात के बाद से मिलीसेकेंड की संख्या के लिए उन्हें परिवर्तित कर सकते हैं जनवरी 1, 1970, इस तरह कर रहे हैं:

var startTime = startDate.getTime(), endTime = endDate.getTime(); 

तो फिर तुम कर सकते थे 86,400,000 से एक और बढ़ाने looptime एक से लूप (1000 * 60 * 60 * 24) - एक ही दिन में मिलीसेकेंड की संख्या:

for(loopTime = startTime; loopTime < endTime; loopTime += 86400000) 
{ 
    var loopDay=new Date(loopTime) 
    //use loopDay as you wish 
} 
+1

+1, मुझे काम करने के लिए पर्याप्त दे दिया, आईव ने मेरे प्रश्न –

+5

में कामकाजी समाधान शामिल किया, यह काम नहीं करता है जब डेलाइट सेविंग टाइम चेंज (उन क्षेत्रों में जहां यह कोई मुद्दा है) से पहले लूपिंग करते हैं। अच्छा समाधान अन्यथा। – chadgh

+2

आप यह नहीं मान सकते कि दिन में 86400000' सेकंड हैं। यह पाश डेलाइट बचत परिवर्तन और अन्य किनारे की स्थितियों के लिए नाजुक है। –

-3

Jayarjo के जवाब के आधार पर:

var loopDate = new Date(); 
loopDate.setTime(datFrom.valueOf()); 

while (loopDate.valueOf() < datTo.valueOf() + 86400000) { 

    alert(loopDay); 

    loopDate.setTime(loopDate.valueOf() + 86400000); 
} 
+0

इसके लिए एक टिप्पणी यह ​​है कि तुलना से कम की तुलना में कम है! =, जब किसी कारण से कई महीनों में लूप होता है! = तुलना कभी नहीं होती है। –

+0

डीएसटी के अलावा, एक और किनारे की स्थिति "लीप सेकेंड" है। एक दूसरा अंतर * करता है * पदार्थ - मिलीसेकंड में परिवर्तित तिथियां किसी दिए गए दिन के पहले दूसरे से मेल खाते हैं। एक दूसरी त्रुटि और आप पिछले दिन जमीन पर उतरते हैं। –

59

टॉम गुलेन के उत्तर के आधार पर।

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
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 
} 
0

Tabare के जवाब के आधार पर, मैं अंत में एक और दिन को जोड़ने के लिए, के बाद से चक्र

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); 
} 
-1

यहाँ सरल काम कर कोड से पहले कट जाता है था, मुझे

के लिए काम किया

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 
 

 
}

संबंधित मुद्दे