2008-10-28 16 views
10
today1 = new Date(); 
today2 = Date.parse("2008-28-10"); 

इनके समय (मिलीसेकंड) मूल्यों की तुलना करने के लिए मुझे निम्नलिखित करना है, क्योंकि आज 2 केवल एक संख्या है।दिनांक .parse दिनांक वस्तु वापस क्यों नहीं करता है?

if (today1.getTime() == today2) 

यह क्यों है?

+0

और उसमें क्या समस्या है? आपको इसे एक कदम में क्यों करने की ज़रूरत है? क्या कोई व्यवसाय की ज़रूरत है? – mohammedn

+1

मेरी समस्या यह है कि मैं, और मुझे यकीन है कि अन्य, ऑब्जेक्ट पर किसी विधि पर एक पार्स विधि की अपेक्षा करेंगे जिस प्रकार विधि को कॉल किया जाता है। – ProfK

उत्तर

25

शीर्षक में सवाल का जवाब करने के लिए: क्योंकि वे तो फैसला किया जावास्क्रिप्ट बनाते समय भाषा। शायद क्योंकि जावा के java.util.Date पार्स समारोह एक ही बात कर रहा था, और वे भाषा अधिक परिचित महसूस करने के लिए अपने व्यवहार की नकल करना चाहता था।

पाठ में सवाल का जवाब करने के लिए ... दो तारीख वस्तुओं को पाने के लिए इस संरचना का उपयोग करें:

var today2 = new Date(Date.parse("2008-10-28")); 

संपादित करें: एक साधारण

var today2 = new Date("2008-10-28"); 

भी काम करता है।

नोट कि इंटरनेट एक्सप्लोरर (यानी जेस्क्रिप्ट) दिनांक स्ट्रिंग में डैश को समझ में नहीं आता है। यह स्लेश के साथ काम करता है, हालांकि:

var today2 = new Date("2008/10/28"); 
+1

बीच महीने और तीसरा तारीख है? –

+4

@ डेरेक: हाँ। यही एकमात्र तारीख नोटेशन है जो किसी भी प्रकार की समझ में आता है। – Tomalak

4

अगर मैं सही ढंग से याद, दिनांक आप नीचे मिलीसेकंड करने के लिए आप दिनांक वस्तु बनाई गई एक मूल्य देता है। इसलिए जब तक यह कोड 2008-28-10 को 00: 00: 00: 000 पर ठीक से चलता है, वे वही नहीं होंगे।

बस एक अतिरिक्त: Date.parse() परिभाषा के द्वारा एक लंबे मूल्य तिथि की मिलीसेकंड मान का प्रतिनिधित्व करने, और न दिनांक वस्तु ही देता है। आप दिनांक वस्तु ही रखना चाहते हैं, तो बस यह इतना तरह का निर्माण:

var newDate = new Date(); 
newDate.setFullYear(2008,9,28); 

की जाँच अधिक संदर्भ के लिए: the Date class reference

+0

वह मूल प्रश्न का उत्तर नहीं देता है, जो - रेफ्रज्ड - 'दिनांक क्यों है, तिथि से पहले एक पूर्णांक, एक पूर्णांक, दिनांक से वापस आया?'। मुझे इसका उत्तर नहीं पता है, लेकिन एक वैकल्पिक – belugabob

+0

के रूप में गलत जवाब देने का मौका अस्वीकार करें जैसा कि मैंने जोड़ा, डेट.परसे द्वारा defise मिलीसेकंड वैल्यू देता है, संदर्भ को देखें जो मैंने लिंक किया है ... –

1

क्या डेटा.परसे लौट रहा है एक नाएन है। कौन सा मूल रूप से अनिश्चितकालीन संख्या है। स्ट्रिंग को किसी तारीख में बदलने में असमर्थ होने पर यह सबसे अधिक कार्यान्वयन वापस आता है। कुछ कार्यान्वयन कुछ भी लेकिन एक RFC 1123 अनुरूप तारीख तार (जो है वह सब कल्पना की आवश्यकता है) के साथ सामना नहीं है।

संपादित करें: इस उत्तर में एक टिप्पणी बताती है कि Date.parse NaN वापस नहीं करता है। हालांकि spec का कहना है कि पार्स एक संख्या वापस करना चाहिए। एक स्ट्रिंग देने पर यह कितनी संख्या वापस आनी चाहिए कि यह किसी तारीख के रूप में पार्स नहीं कर सकता है? यह 0 या -1 या कुछ अन्य ऐसे 'नकली' मान का उपयोग नहीं कर सकता क्योंकि ये 1 जनवरी, 1 9 70 से वैध मिलीसेकंड ऑफसेट्स हैं। मोज़िला और आईई दोनों नाएन लौटते हैं जो करने के लिए एक पूरी तरह समझदार बात है।

जबकि spec एक स्ट्रिंग की पार्सिंग को "2008-28-10" जैसी वैध तिथि तक रोक नहीं देती है, इसकी आवश्यकता नहीं होती है। मैं किसी भी कार्यान्वयन में नहीं आया है जो कल्पना में आवश्यक से ज्यादा कुछ भी करता है। इसलिए "10 अक्टूबर, 2008" निकटतम स्ट्रिंग पर पहुंचने वाला सबसे नज़दीक है जो ठीक से विश्लेषण करेगा।

+0

Date.parse निश्चित रूप से एक NaN वापस नहीं करता है। – ProfK

+0

इसे आज़माएं। इसे "2008-28-10" दें, जैसा कि सवाल है और ISNaN के साथ परीक्षण है। – AnthonyWJones

+0

क्षमा करें, मैं 'प्रश्न बॉक्स' कोडिंग कर रहा था और गलत दिनांक प्रारूप का उपयोग किया था। आप यह इंगित कर सकते थे कि मेरी विशेष तिथि .parse() एक नैन लौट रही थी, हालांकि। – ProfK

2

मैं भाषा डिजाइनरों के स्थान पर जवाब नहीं दे सकता, लेकिन आप इस तरह के ऑब्जेक्ट प्राप्त करने के लिए दिनांक निर्माता में दिनांक .parse या Date.UTC के परिणाम का उपयोग कर सकते हैं।

ध्यान दें कि आपका कोड नमूना गलत है: यह वैध दिनांक प्रारूप नहीं है, आईएसओ (yyyy-mm-dd) और न ही आईईटीएफ (सोम, 25 दिसंबर 1995 13:30:00 GMT + 0430)। तो आपको एक नाएन मिल जाएगा। दिनांक। केवल MDC पर मैंने जो पढ़ा है, उससे आईईटीएफ प्रारूप को समझें।

यदि आपको दो तिथियों की तुलना करने की आवश्यकता है, तो आप .getFullYear(), .getMonth() और .getDay() के परिणामों की तुलना कर सकते हैं, या बस वांछित स्तर पर स्ट्रिंग प्रस्तुतियों की तुलना कर सकते हैं।

var d1 = new Date(); 
var n = Date.parse("28 Oct 2008"); 
var d2 = new Date(n); 
var d3 = new Date("28 october 2008"); 

alert(d1.toDateString() == d2.toDateString()); 
alert(d2.toDateString() == d3.toDateString()); 
संबंधित मुद्दे