जावास्क्रिप्ट में गेटमार्ट पिछले महीने देता है


139

मैं एक तारीख का उपयोग कर रहा हूं, जो प्रारूप में एक तारीख देता है Sun Jul 7 00:00:00 EDT 2013। भले ही महीना जुलाई कहता है, अगर मैं गेटमार्ट करता हूं, तो यह मुझे पिछले महीने देता है।

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");
d1.getMonth());//gives 6 instead of 7

मैं क्या गलत कर रहा हूं?



2
जावास्क्रिप्ट में तारीखों के साथ अपना दिमाग मत खोओ। यदि आप कर सकते हैं Moment.js का प्रयोग करें
Valamas

6
मुझे विश्वास नहीं होता कि यह कितना वास्तविक है
neaumusic

Moment.js डेटडिफ़ ठीक से नहीं कर सकते। यदि आप एक ही महीने के भीतर डेटडिफ़ कर रहे हैं तो यह ठीक है, लेकिन इसे 2 अलग-अलग महीनों (यानी 27-04-2018 और 24-05-2018) तक करने की कोशिश करें और यह एक दिन का है।
रोज़्ज़ा

1
जब तक तुम कोशिश करो रुको getYear()!! ;-)
जेम्स पोल्ज़

जवाबों:


266

क्योंकि getmonth () 0. से शुरू होता है। आप जो चाहते हैं d1.getMonth() + 1उसे हासिल करना चाहते हैं।


194
मुझे कहना होगा, एक महीने की संख्या को शून्य अनुक्रमित करने के लिए मैं थोड़ी देर में देखी गई सबसे विनम्र चीज है। '
लैरी बड

5
क्यों किसी को यह 0 पर आधारित होगा अगर getDate 1-31 देता है?
अभिनव गुनियाल

6
सबसे शायद आपको करना होगा d1.getMonth() < 12 ? d1.getMonth() + 1 : 1- अन्यथा दिसंबर 13 होगा, नहीं?
डैनियलकहान

7
@DanielKhan नहीं, क्योंकि दिसंबर 11 होगा, इसलिए इसे करने के लिए 1 जोड़ने सही ढंग से कभी कोई मान नहीं करना चाहिए से अधिक 11. होगा यह 12. getMonth () फ़ंक्शन
unenthusiasticuser

7
@LarryBud, तर्क शायद यह है कि तारीख के दूसरे भागों (महीने, वर्ष, घंटे, मिनट, सेकंड ...) के विपरीत जो हमेशा संख्या के रूप में उपयोग किए जाते हैं, महीने को अक्सर पाठ में परिवर्तित किया जाता है, का उपयोग करके नामों की एक सरणी, जो निश्चित रूप से 0-आधारित है। सी मानक पुस्तकालयों में यह पहले से ही था, जो 40 वर्ष से अधिक होना चाहिए।
जकारोन

19

getMonth()फ़ंक्शन शून्य अनुक्रमित आधारित है। आपको करने की जरूरत हैd1.getMonth() + 1

हाल ही में मैंने मोमेंट.जेएस लाइब्रेरी का इस्तेमाल किया और कभी पीछे मुड़कर नहीं देखा। कोशिश करो!


10

मान लें कि आप अपने चर का उपयोग करते हैं

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");

महीना को सटीक होने के लिए +1 की आवश्यकता होती है, इसकी गिनती 0 से शुरू होती है

d1.getMonth() + 1 // month 

इसके विपरीत .... इन विधियों को एक प्लस 1 की आवश्यकता नहीं है

d1.getSeconds()   // seconds 
d1.getMinutes()   // minutes 
d1.getDate()      // date    

और ध्यान दें यह .getDate()नहीं है।getDay()

d1.getDay()       // day of the week as a 

उम्मीद है की यह मदद करेगा

मुझे संदेह है कि इन तरीकों में ऐतिहासिक कारणों से निरंतरता का अभाव है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.