कन्वर्ट dd-mm-yyyy स्ट्रिंग आज तक


184

मैं निम्नलिखित का उपयोग करके जावास्क्रिप्ट में एक दिनांक ऑब्जेक्ट में प्रारूप dd-mm-yyyy में स्ट्रिंग बदलने की कोशिश कर रहा हूं:

 var from = $("#datepicker").val();
 var to = $("#datepickertwo").val();
 var f = new Date(from);
 var t = new Date(to);

("#datepicker").val()प्रारूप dd-mm-yyyy में एक दिनांक शामिल है। जब मैं निम्नलिखित कार्य करता हूं, मुझे "अमान्य दिनांक" मिलता है:

alert(f);

क्या यह '-' प्रतीक के कारण है? मैं इससे कैसे उबरूं?


क्या यह सभी तिथियों या विशेष रूप से एक के साथ होता है?
कासदेगा

जवाबों:


325

पर विभाजित "-"

स्ट्रिंग को उन भागों में पार्स करें जिनकी आपको ज़रूरत है:

var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])

रेगेक्स का प्रयोग करें

var date = new Date("15-05-2018".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))

रेगेक्स का उपयोग क्यों नहीं किया जाता है?

क्योंकि आप जानते हैं कि आप तीन भागों से बने एक स्ट्रिंग पर काम कर रहे होंगे, जिसे हाइफ़न द्वारा अलग किया गया है।

हालाँकि, यदि आप दूसरे स्ट्रिंग के भीतर उसी स्ट्रिंग की तलाश कर रहे थे, तो रेगेक्स जाने का रास्ता होगा।

पुन: उपयोग

क्योंकि आप इसे अपने नमूना कोड में एक से अधिक बार कर रहे हैं, और हो सकता है कि आपके कोड बेस में कहीं और हो, इसे किसी फ़ंक्शन में लपेटें:

function toDate(dateStr) {
  var parts = dateStr.split("-")
  return new Date(parts[2], parts[1] - 1, parts[0])
}

के रूप में उपयोग:

var from = $("#datepicker").val()
var to = $("#datepickertwo").val()
var f = toDate(from)
var t = toDate(to)

या यदि आप अपने कार्य में jQuery बुरा नहीं मानते हैं:

function toDate(selector) {
  var from = $(selector).val().split("-")
  return new Date(from[2], from[1] - 1, from[0])
}

के रूप में उपयोग:

var f = toDate("#datepicker")
var t = toDate("#datepickertwo")

आधुनिक जावास्क्रिप्ट

यदि आप अधिक आधुनिक जेएस का उपयोग करने में सक्षम हैं, तो सरणी विनाशकारी एक अच्छा स्पर्श भी है:

const toDate = (dateStr) => {
  const [day, month, year] = dateStr.split("-")
  return new Date(year, month - 1, day)
}

9
मुझे यह हरा ... लेकिन मैं अभी भी DateJs का उपयोग करता हूं। बाड़ पोस्ट त्रुटि के कारण यह बिल्कुल सही नहीं है। महीना 0-11 है, इसलिए आपको 1. f = नई तारीख ([2], [1] -1 से, [0]) से घटाना होगा;
कासदेगा

12
एक बग के साथ चयनित उत्तर जो गलत तिथियां पैदा करता है। बहुत बढ़िया!
epascarello

3
चीयर्स @kasdega - इसे संपादित किया ... थोड़ी देर पहले!
एड्रियन लिंच

@AdrianLynch जावास्क्रिप्ट में "महीना dd, yyyy" को "MM / dd / yyyy" में कैसे बदलें?
दिलीपकुमार 1007

1
@ एड्रियन लिंच आधुनिक जावास्क्रिप्ट विकल्प बहुत अच्छा है! धन्यवाद।
अलेक्जेंड्रे रिबेरो

134

नियमित अभिव्यक्ति उदाहरण:

new Date( "13-01-2011".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") );

8
एक संशोधन जो भी लेता है /वह सीमांत होता है और एक वर्ष 2 अंकों (या 1 से बड़ा कोई भी) से बना होता है:replace( /(\d{2})[-/](\d{2})[-/](\d+)/, "$2/$1/$3")
इज़्हाकी

1
यह चयनित उत्तर @ AdemirNuno क्यों होना चाहिए? ज्ञात प्रारूप में स्ट्रिंग के लिए RegEx का उपयोग क्यों करें? आप एक पैटर्न की तलाश में नहीं हैं, आप जानते हैं कि पहला नंबर दिन, दूसरा महीना और तीसरा साल है। RegEx इस मामले में नौकरी के लिए गलत उपकरण है।
एड्रियन लिंच

एक संशोधन जो गैर-अंकों के सीमांकक लेता है, जिसमें प्रमुख शून्य और 2 या 4 अंक वाले वर्ष होते हैं: new Date( "23. 2. 15".replace( /(\d+)[^d]+(\d+)[^d]+(\d+)/, "$2/$1/$3") ); en.wikipedia.org/wiki/Date_format_by_country
PaulH

यह बहुत अभ्यास आदमी है, धन्यवाद। मेरी तिथि प्रारूप यह समय के साथ आता है, इसलिए मैं इसे इस प्रकार बताता हूं: 'नई तिथि ("13-01-2011" .replace (/ (\ d {2}) - (\ d {2}) - (\ w) / , "$ 2 / $ 1 / $ 3"));) क्या यह सही है?
कामुरन सोनसेक

@NeerajSingh जावास्क्रिप्ट में "महीना dd, yyyy" को "MM / dd / yyyy" में कैसे बदलें?
दिलीपकुमार 1007

15

एक अन्य संभावना:

var from = "10-11-2011"; 
var numbers = from.match(/\d+/g); 
var date = new Date(numbers[2], numbers[0]-1, numbers[1]);

अंकों का मिलान करें और उन्हें पुनः व्यवस्थित करें


साथ ही मूल प्रश्न "dd-mm-yyyy" को निर्दिष्ट करता है, "mm-dd-yyyy" को नहीं, इसलिए यह अभी भी गलत है (लेकिन केवल)।
फिल एम जोन्स

@epascarello जावास्क्रिप्ट में "महीना dd, yyyy" को "MM / dd / yyyy" में कैसे बदलें?
दिलीपकुमार 1007

1
var date = new Date(numbers[2], numbers[1]-1, numbers[0]);
रुई धुन


6
var from = $("#datepicker").val(); 
var f = $.datepicker.parseDate("d-m-Y", from);

3
क्या आप Date.parseDate प्राप्त कर रहे थे?
18

@kasdega क्षमा करें, मैं $ .datepicker.parseDate के बारे में सोच रहा था, अब इसे तय किया :)
साद इमरान।

आपको $.datepicker.parseDate("dd-mm-yy", from);एक तिथि को ठीक से उपयोग करने के लिए उपयोग करना चाहिए जैसे 24-01-2017, api.jqueryui.com/datepicker
एंड्रिया मौरो

4

आप Date()वस्तु के कोष्ठकों के अंदर की तारीख भी लिख सकते हैं , जैसे:

new Date("Month dd, yyyy hh:mm:ss")
new Date("Month dd, yyyy")
new Date(yyyy,mm,dd,hh,mm,ss)
new Date(yyyy,mm,dd)
new Date(milliseconds)

@AmitSengar जावास्क्रिप्ट में "महीना dd, yyyy" को "MM / dd / yyyy" में कैसे बदलें?
दिलीपकुमार 1007

3

इस प्रारूप का उपयोग करें: myDate = new Date('2011-01-03'); // Mon Jan 03 2011 00:00:00


1
आपको वह parseDateफ़ंक्शन कहाँ से मिला ? क्या यह एक देशी जावास्क्रिप्ट फ़ंक्शन है?
जोसेफ सिल्बर

खेद है कि मैं इसे कैसे लागू करूं? इसके अलावा मुझे dd-mm-yy के रूप में प्रारूप की आवश्यकता है
user559142

parseDate एक देशी JS फ़ंक्शन है। अधिक जानकारी के लिए देखें: xaprb.com/articles/javascript-date-parsing-demo.html
डायोडस - जेम्स मैकफर्लेन

1
@ डायोडस ... वास्तव में यह मूल है? कैसे एफएफ और क्रोम त्रुटियों को फेंकना है?
epascarello

2
@ डायोडस अंतिम संपादन के साथ भी यह मेरे लिए काफी काम नहीं करता (कम से कम क्रोम के साथ)। यह करने के लिए दिनांक '2011-01-03'और UTC समय सेट करता है 00:00:00। इसलिए यदि उपयोगकर्ता का समय क्षेत्र UTC से कम है, तो यह वास्तव में एक दिन पहले होगा।
माइक

3

मेरे मामले में

new Date("20151102034013".replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1-$2-$3T$4:$5:$6"))

परिणाम: सोम नवम्बर २०१५ ०४:४०:१३ GMT + ०१०० (सीईटी) तब मैं .getTime () का उपयोग मिलीसेकंड के साथ काम करने के लिए करता हूं।


3

स्वीकृत उत्तर थोड़े में एक बग है

var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])

इस बात पर विचार करें कि क्या डेटपिकर में "77-78-7980" शामिल है जो स्पष्ट रूप से एक वैध तारीख नहीं है। यह परिणाम होगा:

var f = new Date(7980, 77, 77);
=> Date 7986-08-15T22:00:00.000Z

जो शायद वांछित परिणाम नहीं है।

इसका कारण एमडीएन पर बताया गया है साइट :

जहां दिनांक को एक से अधिक तर्क वाले निर्माता के रूप में कहा जाता है, यदि मान उनकी तार्किक सीमा से अधिक हैं (उदाहरण के लिए 13 को महीने के मूल्य या मिनट के मूल्य के लिए 70 के रूप में प्रदान किया जाता है), तो आसन्न मूल्य समायोजित किया जाएगा। जैसे new Date(2013, 13, 1)के बराबर है new Date(2014, 1, 1)


समस्या को हल करने का एक बेहतर तरीका है:

const stringToDate = function(dateString) {
  const [dd, mm, yyyy] = dateString.split("-");
  return new Date(`${yyyy}-${mm}-${dd}`);
};

console.log(stringToDate('04-04-2019'));
// Date 2019-04-04T00:00:00.000Z

console.log(stringToDate('77-78-7980'));
// Invalid Date

यह आपको अमान्य इनपुट को संभालने की संभावना देता है।

उदाहरण के लिए:

const date = stringToDate("77-78-7980");

if (date === "Invalid Date" || isNaN(date)) {
  console.log("It's all gone bad");
} else {
  // Do something with your valid date here
}

2

आपकी सहायता के लिए आप बाहरी लाइब्रेरी का उपयोग कर सकते हैं।

http://www.mattkruse.com/javascript/date/source.html

getDateFromFormat(val,format);

इसे भी देखें: जावास्क्रिप्ट में पार्स डेटाइम स्ट्रिंग


जावास्क्रिप्ट में myDate = '20 / 06/17 'को '20 / 6/2017 00:00:00' प्रारूप में कैसे परिवर्तित करें?
घनश्याम लखानी

1

उन सभी क्षुद्र तारीख से संबंधित मुद्दों के लिए Datejs पर एक नज़र डालें .. आप इसे पार्सडेट फ़ंक्शन द्वारा भी हल कर सकते हैं


0

आप एक Regexp का उपयोग कर सकते हैं।

var result = /^(\d{2})-(\d{2})-(\d{4})$/.exec($("#datepicker").val());
if (result) {
    from = new Date(
        parseInt(result[3], 10), 
        parseInt(result[2], 10) - 1, 
        parseInt(result[1], 10)
    );
}

गलत महीना पैदा करता है! महीने की शुरुआत शून्य पर होती है, एक पर नहीं। इसलिए यदि आप जनवरी करते हैं, तो आप कहेंगे कि फ़रवरी
उपसंहारक

1
@epascarello - भूल गए कि तारीख एपीआई कितना लंगड़ा है।
ChaosPandion

@ChaosPandion: जावास्क्रिप्ट में myDate = '20 / 06/17 'को '20 / 6/2017 00:00:00' प्रारूप में कैसे परिवर्तित करें?
घनश्याम लखानी

-1
new Date().toLocaleDateString();

उस के रूप में सरल, बस तारीख को वस्तु वस्तु के लिए अपनी तारीख से गुजारें


क्या आप का मतलब डेट कंस्ट्रक्टर के अंदर डेट स्ट्रिंग पास करना है, जैसे new Date('30/12/2018').toLocaleDateString()?? वह अमान्य तिथि
सुश्री तामील
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.