दो चीजें हैं जो आप करना चाहते हैं, जो मेरे देखें सबसे अच्छी तरह से
1) आप यह सुनिश्चित करना चाहते हैं कि तिथि वास्तविक, वास्तविक तिथि है। उदाहरण के लिए 201 9-02-29 वास्तविक तिथि नहीं है जबकि 2020-02-29 एक वास्तविक तारीख है क्योंकि 2020 एक लीप वर्ष
2) आप यह जांचना चाहते हैं कि तिथि सही प्रारूप में है (इसलिए डीडी/एमएम/yyyy)
दूसरे बिंदु को सरल रेगेक्स के साथ आसानी से पर्याप्त किया जा सकता है, इसके बहुत सारे उदाहरण।
मामलों को जटिल करने के लिए, यदि आप फ़ायरफ़ॉक्स से पूछें तो 201 9-02-29 वास्तविक तिथि है, तो यह नाएन वापस आ जाएगी, जो आप उम्मीद करेंगे।
क्रोम, पर दूसरी ओर कहेंगे कि यह एक वास्तविक तिथि है और आप वापस मार्च 2019 के 1 दे - जो
क्रोम मान्य करेगा, यह भी एक उचित तिथि के रूप में एक अंक की संख्या भी कुछ के लिए स्वीकार करेंगे अजीब कारण, इसे "2" खिलाएं और यह आपको 2001 से पूर्ण तिथि देगा - जो
मान्य करेगा, तो पहला चरण एक ऐसा फ़ंक्शन बनाना है जो किसी दिनांक को समझने का प्रयास करता है (स्वरूप चाहे कोई फर्क नहीं पड़ता) और क्रॉस क्रॉस करता है -ब्रोसर एक बूलियन लौटने के लिए इंगित करता है कि दिनांक वैध है या नहीं
function validatableDate(value)
{
Date.prototype.isValid = function()
{ // An invalid date object returns NaN for getTime() and NaN is the only
// object not strictly equal to itself.
return this.getTime() === this.getTime();
};
minTwoDigits = function(n)
{ //pads any digit less than 10 with a leading 0
return (parseInt(n) < 10 ? '0' : '') + parseInt(n);
}
var valid_date = false;
var iso_array = null;
// check if there are date dividers (gets around chrome allowing single digit numbers)
if ((value.indexOf('/') != -1) || (value.indexOf('-') != -1)) { //if we're dealing with - dividers we'll do some pre-processing and swap them out for/
if (value.indexOf('-') != -1) {
dash_parts = value.split('-');
value = dash_parts.join("/");
//if we have a leading year, we'll put it at the end and work things out from there
if (dash_parts[0].length > 2) {
value = dash_parts[1] + '/' + dash_parts[2] + '/' + dash_parts[0];
}
}
parts = value.split('/');
if (parts[0] > 12) { //convert to ISO from UK dd/mm/yyyy format
iso_array = [parts[2], minTwoDigits(parts[1]), minTwoDigits(parts[0])]
} else if (parts[1] > 12) { //convert to ISO from American mm/dd/yyyy format
iso_array = [parts[2], minTwoDigits(parts[0]), minTwoDigits(parts[1])]
} else //if a date is valid in either UK or US (e.g. 12/12/2017 , 10/10/2017) then we don't particularly care what format it is in - it's valid regardless
{
iso_array = [parts[2], minTwoDigits(parts[0]), minTwoDigits(parts[1])]
}
if (Array.isArray(iso_array)) {
value = iso_array.join("-");
var d = new Date(value + 'T00:00:01Z');
if (d.isValid()) //test if it is a valid date (there are issues with this in Chrome with Feb)
{
valid_date = true;
}
//if the month is Feb we need to do another step to cope with Chrome peculiarities
if (parseInt(iso_array[1]) == 2) {
month_info = new Date(iso_array[0], iso_array[1], 0);
//if the day inputed is larger than the last day of the February in that year
if (iso_array[2] > month_info.getDate()) {
valid_date = false;
}
}
}
}
return valid_date;
}
function validatableDate(t) {
Date.prototype.isValid = function() {
return this.getTime() === this.getTime()
}, minTwoDigits = function (t) {
return (parseInt(t) < 10 ? "0" : "") + parseInt(t)
};
var a = !1,
i = null;
return -1 == t.indexOf("/") && -1 == t.indexOf("-") || (-1 != t.indexOf("-") && (dash_parts = t.split("-"), t = dash_parts.join("/"), dash_parts[0].length > 2 && (t = dash_parts[1] + "/" + dash_parts[2] + "/" + dash_parts[0])), parts = t.split("/"), i = parts[0] > 12 ? [parts[2], minTwoDigits(parts[1]), minTwoDigits(parts[0])] : (parts[1], [parts[2], minTwoDigits(parts[0]), minTwoDigits(parts[1])]), Array.isArray(i) && (t = i.join("-"), new Date(t + "T00:00:01Z").isValid() && (a = !0), 2 == parseInt(i[1]) && (month_info = new Date(i[0], i[1], 0), i[2] > month_info.getDate() && (a = !1)))), a
}
के लिए कि क्या तारीख या मान्य किया जा सकता है नहीं और इसे पढ़ा जाएगा & स्वरूपों में दिनांक समझने
- yyyy के रूप में आप एक क्रॉस-ब्राउज़र परीक्षण हो जाता है यही कारण है कि करने के लिए नीचे संकुचित किया जा सकता है कि -mm-dd
- dd-mm-yyyy
- mm-dd-yyyy
- dd/mm/yyyy
- मिमी/डीडी/yyyy
एक बार जब आप तारीख को मान्य कर लेते हैं तो एक असली, उचित है, तो आप एक रेगेक्स के साथ प्रारूप का परीक्षण कर सकते हैं। तो ब्रिटेन dd/mm/yy
function dateUK(value) {
valid_uk_date=false;
valid_date=validatableDate(value);
if(valid_date && value.match(/^(0?[1-9]|[12][0-9]|3[01])[\/](0?[1-9]|1[012])[\/]\d{4}$/))
{ valid_uk_date=true;
}
return valid_uk_date;
}
के लिए फिर आप जानते हैं कि तारीख एक असली एक है और इसके सही स्वरूप में नहीं है कि।
yyyy-mm-dd प्रारूप के लिए, तुम क्या चाहते हैं:
function dateISO(value) {
valid_iso_date=false;
valid_date=validatableDate(value);
if(valid_date && value.match(/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/))
{ valid_iso_date=true;
}
return valid_iso_date;
}
यह निर्भर करता है कि कैसे पूरी तरह से आप निश्चित रूप से होना चाहता हूँ, प्रारूप विवेक का एक मोटा जांच के लिए एक रेगुलर एक्सप्रेशन से अपने उद्देश्यों के लिए पर्याप्त हो सकता है । यदि फिर भी आप अगर तिथि एक असली एक है और अगर प्रारूप मान्य है तो यह उम्मीद है कि रास्ते बिंदु तुम्हारी मदद करेगा
धन्यवाद
परीक्षण करना चाहते हैं कौन सी भाषा इस के लिए है? – codaddict
@ कोडडिक्ट, नियमित अभिव्यक्ति अधिकांश भाग के लिए भाषा तटस्थ हैं। –
कई प्रोग्रामिंग भाषाओं में किसी भी प्रारूप में तारीख को पार्स करने के लिए सही कार्य होते हैं और एक महीने के भीतर दिनों की संख्या का ख्याल रखते हैं, लीप साल इत्यादि। – eumiro