2012-02-29 13 views
5

में दिनांक घटाव मेरे पास दो टेक्स्ट बॉक्स हैं जो YYYY/MM/DD प्रारूप में क्रमशः Start Date औरस्वीकार करते हैं।जावास्क्रिप्ट

मुझे उपयोगकर्ता को सतर्क करने की आवश्यकता है यदि वह समाप्ति तिथि का चयन करता है जो 50 दिनों तक प्रारंभ तिथि से अधिक हो।

यहाँ मैं अब तक है:

var startDate = new Date(document.getElementsByName('MYSTARTDATE').value); 
var endDate = new Date(document.getElementsByName('MYENDDATE').value); 
if ((endDate - startDate) > 50) 
{ 
    alert('End date exceeds specification'); 
    return false; 
} 

बस एक उदाहरण के रूप में, जब मैं 2012/01/22 व अन्त तिथि के रूप में प्रारंभ तिथि endDate - startDate के लिए परिणाम के रूप में 2012/02/29

startDate = 'Sun Jan 22 00:00:00 UTC +0530 2012' 
endDate = 'Wed Feb 29 00:00:00 UTC +0530 2012' 

और 3283200000 है का चयन करें, 38 के बजाय। मैं गलत क्या कर रहा हूँ?

उत्तर

9

3283200000 मिलीसेकंड में 38 दिन है।

38 दिनों एक्स 24 घंटे एक्स 60 मिनट एक्स 60 सेकंड x 1000 मिलीसेकेंड

इसके अलावा, उन दो तिथियों के बीच 38 दिनों, नहीं देखते हैं 39.

एक आसान समाधान एक चर (स्थिर है वास्तव में) एक दिन में मिलीसेकेंड की संख्या के रूप में परिभाषित:

var days = 24*60*60*1000; 

और एक "इकाई" अपनी तुलना में के रूप में है कि चर का उपयोग:

if ((endDate - startDate) > 50*days) { 
    ... 
} 
+0

ओह .. तो मुझे लगता है कि मुझे केवल अंतर (24x60x60x1000) द्वारा विभाजित करने की आवश्यकता है। धन्यवाद! – user656523

+0

हां, एक आसान, उपयोगकर्ता-पठनीय समाधान के लिए मेरा संपादन देखें। –

0

डेफलाइट बचत समय के कारण जेफ बी का समाधान गलत है। यदि 31 अक्टूबर को स्टार्टडेट कहता है, और एंडडेट 20 दिसंबर को है, तो वास्तव में उन दो गुना के बीच समाप्त होने की अवधि 50 दिन और 1 घंटा है, 50 दिन नहीं। यह विशेष रूप से खराब है यदि आपका कार्यक्रम दिन के समय के बारे में परवाह नहीं करता है और मध्यरात्रि में हर समय सेट करता है - उस स्थिति में, सभी गणना पूरी सर्दियों के लिए एक से बंद हो जाएगी।

तिथियों को घटाने के सही तरीके का हिस्सा प्रत्येक बार के लिए एक नई तिथि वस्तु को तुरंत चालू करना है, और उसके बाद प्रत्येक महीने में कितने दिन वास्तव में पारित होने की गणना करने के लिए दिन की संख्या के साथ एक ऐरे का उपयोग करना है।

लेकिन चीजों को और भी खराब बनाने के लिए, यूरोप जो घड़ियों को बदलता है, वह तारीखें अलग-अलग हैं जो न्यूयॉर्क में घड़ियों को बदलती हैं। इसलिए, अकेले टाइमज़ोन यह निर्धारित करने के लिए पर्याप्त नहीं है कि कितने दिन बीत चुके हैं; स्थान भी आवश्यक है।

डेलाइट बचत समय तिथि प्रबंधन के लिए महत्वपूर्ण जटिलता जोड़ता है। मेरी वेबसाइट में, पारित दिनों की संख्या की सटीक गणना करने के लिए आवश्यक फ़ंक्शन लगभग सौ लाइनें है। वास्तविक जटिलता इस बात पर निर्भर करती है कि गणना क्लाइंट साइड या सर्वर की तरफ है या दोनों और डेटा कौन देख रहा है।