जांचें कि क्या तारीख वैध है


124

निम्नलिखित परिदृश्य है:

मेरे पास एक Stringतारीख और एक तारीख प्रारूप है जो अलग है। Ex .:
date: 2016-10-19
dateFormat: "DD-MM-YYYY"।

मुझे यह जाँचने की आवश्यकता है कि क्या यह तारीख एक वैध तारीख है।

मैंने निम्नलिखित चीजों की कोशिश की है

var d = moment("2016-10-19",dateFormat);

d.isValid()falseहर बार लौट रहा है। क्या Moment.js दिए गए प्रारूप में तारीख को पार्स नहीं करता है?

फिर मैंने DD-MM-YYYYपहले तारीख को प्रारूपित करने की कोशिश की और फिर इसे Moment.js को दिया:

var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);

अब date.isValid()मुझे वांछित परिणाम दे रहा है, लेकिन यहां Moment.js दिनांक ऑब्जेक्ट दो बार बनाई गई है। इससे कैसे बचा जा सकता है? क्या कोई बेहतर समाधान है?

FYI करें मैं बदलने की अनुमति नहीं कर रहा हूँ dateFormat


क्या आपको डेटफ़ॉर्मट का मान बदलने की अनुमति नहीं है? उस स्थिति में, आपको इनपुट के प्रारूप को बदलना होगा, क्योंकि 2016-10-19 YYYY-MM-DD है, DD-MM-YYYY नहीं। आपको क्या बदलने की अनुमति है?
पोचन

इनपुट डेट पिकर से आ रहा है। वह भी नहीं बदल सकते :(
गणेश

1
क्या मैं पूछ सकता हूं कि आपको दिनांक परिवर्तनशील चर को बदलने की अनुमति क्यों नहीं है? var d = क्षण ("19-10-2016", "DD-MM-YYYY"); जहाँ तक आपका सवाल है, आपकी समस्याओं का समाधान
करूँगा

वास्तव में नहीं कह सकता। लेकिन उस मूल्य को बदलना मेरे वश में नहीं है।
गणेश

जवाबों:


185

समाधान खोजने में सक्षम था। चूंकि मुझे जो तारीख मिल रही है, वह आईएसओ फॉर्मेट में है, केवल वह क्षण प्रदान करना, जो उसे मान्य करेगा, तारीख को पारित करने की कोई आवश्यकता नहीं है।

var date = moment("2016-10-19");

और फिर date.isValid()वांछित परिणाम देता है।


15
क्या किसी को पता है कि वर्तमान पसंदीदा तरीका क्या है? यह विधि अब निम्नलिखित "डिप्रेसन वार्निंग" को फेंक देती है: पल निर्माण जेएस दिनांक को वापस आ जाता है। यह हतोत्साहित किया जाता है और आगामी प्रमुख रिलीज में हटा दिया जाएगा। अधिक जानकारी के लिए कृपया github.com/moment/moment/issues/1407 देखें ।
एंड्रयू


4
बस एक सिर है कि यह हमेशा काम नहीं करता है: var a = moment('12345'); a.isValid() // is trueयह विफल रहता है क्योंकि यदि यह तारीख को पार्स नहीं कर सकता है तो पल डिफ़ॉल्ट दिनांक ऑब्जेक्ट पर वापस आ जाएगा। और डिफॉल्ट डेट ऑब्जेक्ट हमेशा एक तारीख लौटाएगा (सिर्फ वही नहीं जो आप चाहते हैं।)
माउविस लेडफोर्ड

1
इसे जोड़ने की आवश्यकता है moment('02').isValid() === true, इसलिए आप इससे सावधान रहना चाहते हैं
ब्रूनो फिंगर

3
इसके अलावाmoment('abcde 1').isValid() === true
अमीराम कोरच

119

var date = moment('2016-10-19', 'DD-MM-YYYY', true);

आपको एक तीसरा तर्क जोड़ना चाहिए जब momentयह कहते हुए कि सख्त पार्सिंग को लागू किया जाए। यहाँ पल प्रलेखन का प्रासंगिक हिस्सा है http://momentjs.com/docs/#/parsing/string-format/ यह अनुभाग के अंत के पास है।


इसका कोई असर नहीं हुआ।
बिलाल बेगेरदज

यह उत्तर सही उत्तर होना चाहिए ........ @ बेगुएरदज में इसका प्रभाव है, विभिन्न मूल्यों का उपयोग करने की कोशिश करें, कभी-कभी सही और कभी-कभी गलत
अक्की


यह आपको एक वर्ष के रूप में 0000 में प्रवेश करने देगा
एडी

17

यहां आप जाएं: वर्किंग फिडल

$(function(){
  var dateFormat = 'DD-MM-YYYY';
  alert(moment(moment("2012-10-19").format(dateFormat),dateFormat,true).isValid());
});

जैसा कि मैंने कहा कि डेटफ़ॉर्मट 'डीडी-एमएम-वाईवाईवाईवाई' है और मुझे इसे बदलने की अनुमति नहीं है।
गणेश

ओह मैं समझा। मुझे उस पर देखने दें।
gschambial

क्या यहां दिनांक स्ट्रिंग बदलने की अनुमति है 2016-10-19?
gschambial

नहीं। यह तारीख लेने वाले से आ रही है
गणेश

1
डेटकपर से आने और इनपुट करने से पहले क्या आप इसे संशोधित नहीं कर सकते var d = moment("2016-10-19",dateFormat);?
gschambial

14

मैं undefinedडेटा मूल्यों के मामलों को संभालने के लिए नई तिथि के साथ क्षण का उपयोग करता हूं :

const date = moment(new Date("2016-10-19"));

की वजह से: moment(undefined).isValid() == true

जहां बेहतर तरीके से: moment(new Date(undefined)).isValid() == false



8

यह कैसे जांचा जाए कि क्या कोई मोमेंट मोमेंट का उपयोग करके एक वैध तारीख है, जब तारीख और तारीख प्रारूप अलग-अलग होते हैं

क्षमा करें, लेकिन क्या इस धागे पर दिए गए किसी भी समाधान ने वास्तव में पूछे गए प्रश्न का उत्तर दिया है?

मेरे पास एक स्ट्रिंग तिथि और एक तारीख प्रारूप है जो अलग है। Ex .: दिनांक: 2016-10-19 dateFormat: "DD-MM-YYYY"। मुझे यह जाँचने की आवश्यकता है कि क्या यह तारीख एक वैध तारीख है।

निम्नलिखित मेरे लिए काम करता है ...

const date = '2016-10-19';
const dateFormat = 'DD-MM-YYYY';
const toDateFormat = moment(new Date(date)).format(dateFormat);
moment(toDateFormat, dateFormat, true).isValid();

// Note: `new Date()` circumvents the warning that
// Moment throws (https://momentjs.com/guides/#/warnings/js-date/),
// but may not be optimal.

लेकिन ईमानदारी से, समझ में नहीं आता क्यों moment.isDate()(के रूप में दस्तावेज ) केवल एक वस्तु स्वीकार करता है। मेरी राय में एक तार का भी समर्थन करना चाहिए।


1
अगर हम पल के लिए 3 तर्क के रूप में सही पास करते हैं, तो यह सटीक दिनांक प्रारूप के लिए जाँच करता है।
राज कुमार एन

2
console.log(` moment('2019-09-01', 'YYYY-MM-DD').isValid()?  ` +moment('2019-09-01', 'YYYY-MM-DD').isValid())
console.log(` moment('2019-22-01', 'YYYY-DD-MM').isValid()?  ` +moment('2019-22-01', 'YYYY-DD-MM').isValid())
console.log(` moment('2019-22-22', 'YYYY-DD-MM').isValid()?  ` +moment('2019-22-22', 'YYYY-DD-MM').isValid())
console.log(` moment('undefined', 'YYYY-DD-MM').isValid()?  ` +moment('undefined', 'YYYY-DD-MM').isValid())

 moment('2019-09-01', 'YYYY-MM-DD').isValid()?  true
 moment('2019-22-01', 'YYYY-DD-MM').isValid()?  true
 moment('2019-22-22', 'YYYY-DD-MM').isValid()?  false
 moment('undefined', 'YYYY-DD-MM').isValid()?  false

क्या आप कृपया अपने उत्तर में कुछ स्पष्टीकरण जोड़ सकते हैं? यह पहले से मौजूद और स्वीकृत जवाब में क्या अतिरिक्त मूल्य जोड़ता है?
स्लफैन

0

यदि तिथि मान्य है तो getTime()वसीयत हमेशा स्वयं के बराबर होगी।

var date = new Date('2019-12-12');
if(date.getTime() - date.getTime() === 0) {
    console.log('Date is valid');
} else {
    console.log('Date is invalid');
}

-2

इसको आजमाओ। यह अच्छा नहीं है, लेकिन यह तब तक काम करेगा जब तक इनपुट आपकी डेट पिकर से निरंतर प्रारूपित नहीं हो जाता।

यह इस उदाहरण में आपके पिकर से आने वाला बैडडेट है

https://jsfiddle.net/xs8tvox9/

var dateFormat = 'DD-MM-YYYY'
var badDate = "2016-10-19";

var splittedDate = badDate.split('-');

if (splittedDate.length == 3) {
  var d = moment(splittedDate[2]+"-"+splittedDate[1]+"-"+splittedDate[0], dateFormat);
  alert(d.isValid())
} else {
  //incorrectFormat
}

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