2011-01-21 12 views
150

मैं स्वचालित रूप से पिछले महीने के पहले और अंतिम दिन के लिए एक तिथि फिल्टर स्थापित करने के लिए इस जावास्क्रिप्ट है:जावास्क्रिप्ट दिनांक.getYear() 2011 में 111 लौटाता है?

$(document).ready(function() { 
    $("#DateFrom").datepicker({ dateFormat: 'dd/mm/yy' }); 
    $("#DateTo").datepicker({ dateFormat: 'dd/mm/yy' }); 

    var now = new Date(); 
    var firstDayPrevMonth = new Date(now.getYear(), now.getMonth() - 1, 1); 
    var firstDayThisMonth = new Date(now.getYear(), now.getMonth(), 1); 
    var lastDayPrevMonth = new Date(firstDayThisMonth - 1); 

    $("#DateFrom").datepicker("setDate", firstDayPrevMonth); 
    $("#DateTo").datepicker("setDate", lastDayPrevMonth); 
}); 

लेकिन now.getYear() की उम्मीद 2011 के बजाय 111 लौटा रहा है कि वहाँ कुछ स्पष्ट है मैं नहीं छूटा है?

+27

आप स्पष्ट रूप से वाई 2 के बग का पहला शिकार हैं। मैं समय और gloating में वापस जाने का सुझाव देते हैं। –

+0

आप कैसे जानते हैं कि यह 111 लौट रहा है? क्या आपने "var now = new date()" लाइन के बाद बस एक चेतावनी() करने का प्रयास किया था? – kvista

+1

@ केली इसे अपने पसंदीदा जावास्क्रिप्ट कंसोल में आज़माएं। – deceze

उत्तर

255

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/getYear

getYear नहीं रह गया है प्रयोग किया जाता है और getFullYear विधि ने ले लिया है।

getYear विधि वर्ष शून्य से 1 9 00 लौटाती है; इस प्रकार:

  • 2000 से अधिक या बराबर वर्षों के लिए, getYear द्वारा लौटाया गया मूल्य 100 या उससे अधिक है। उदाहरण के लिए, अगर साल है 2026, getYear रिटर्न 126
  • के बीच सालों के लिए और 1900 और 1999 सहित, getYear द्वारा दिए गए मान 0 और 99 के बीच उदाहरण के लिए, अगर साल 1976, getYear रिटर्न 76
  • है
  • 1 9 00 से कम वर्षों के लिए, getYear द्वारा लौटाया गया मान 0 से कम है। उदाहरण के लिए, यदि वर्ष 1800 है, getYear रिटर्न -100 है।
  • 2000 से पहले और बाद में खाते में ध्यान देने के लिए, आपको के बजाय getFullYear का उपयोग करना चाहिए ताकि वर्ष पूर्ण में निर्दिष्ट हो।
+0

ग्रेट, वर्क्स, फिक्स्ड मेरी एक दशक पुरानी लिपियों में से एक! :) – ymasood

+22

वाई 2 के फिर से हमला !! – MrDustpan

+3

मुझे विश्वास नहीं है कि मैनुअल से एक कॉपी-एन-पेस्ट उत्तर 31 अपवॉट (लेखन के समय) मिला है। मान लीजिए यह दिखाता है कि यह मुद्दा कितना आम है और कोई भी आरटीएफएम ...; ओ) – deceze

30

आदेश boneheaded मिसाल के साथ पालन करने के लिए, getYear() इसके बजाय 1900

के बाद से वर्षों की संख्या देता है, आप getFullYear() है, जो वास्तविक वर्ष रिटर्न फोन करना चाहिए।

+1

मैं इस सबसे अधिक परेशान उदाहरण –

+0

@StevenLu के विवरण के बारे में उत्सुक हूं: मूल जावा दिनांक API – SLaks

+2

वाह की भयावहता देखें। 1 99 7 में जावा एपीआई में बहिष्कृत। 1 99 7 से नहीं, * फरवरी * 1 99 7 ... 1 99 7 से पहले भी वास्तव में चल रहा था ... आप जानते हैं, मैंने सोचा था कि जावास्क्रिप्ट वास्तव में जावा से कनेक्ट नहीं था ... –

4

मैं मोज़िला जे एस पृष्ठों पर क्या पढ़ा से, getYear मान्य नहीं है। जैसा कि कई बार इंगित किया गया है, getFullYear() जाने का रास्ता है। यदि आप वास्तव में getYear() का उपयोग करना चाहते हैं तो इसमें 1 9 00 जोड़ें।

var now = new Date(), 
    year = now.getYear() + 1900;