जावास्क्रिप्ट में तारीख के लिए एक स्ट्रिंग परिवर्तित


668

मैं एक स्ट्रिंग को जावास्क्रिप्ट में तारीख में कैसे बदल सकता हूं?

var st = "date in some format"
var dt = new date();

var dt_st= //st in date format same as dt


1
ओह अब मैं उलझन में हूँ। क्या आप चाहते हैं Date -> Stringया String -> Date?
फेलिक्स क्लिंग

10
विचार करें jjs.com
हैंश्रानिक

जवाबों:


827

स्ट्रिंग पार्सिंग के लिए सबसे अच्छा स्ट्रिंग प्रारूप जावास्क्रिप्ट तिथि ऑब्जेक्ट कंस्ट्रक्टर के साथ एक साथ आईएसओ प्रारूप है।

आईएसओ प्रारूप के उदाहरण: YYYY-MM-DDया YYYY-MM-DDTHH:MM:SS

लेकिन रुकें! बस "आईएसओ प्रारूप" का उपयोग करके मज़बूती से काम नहीं करता है। स्ट्रिंग को कभी-कभी UTC के रूप में और कभी-कभी स्थानीय समय (ब्राउज़र विक्रेता और संस्करण पर आधारित) के रूप में पार्स किया जाता है। सबसे अच्छा अभ्यास हमेशा UTC के रूप में दिनांक संग्रहीत करने और UTC के रूप में संगणना करने का होना चाहिए।

UTC के रूप में किसी तिथि को पार्स करने के लिए, Z - उदा: जोड़ें new Date('2011-04-11T10:20:30Z')

UTC में एक दिनांक प्रदर्शित करने के लिए, उपयोग करें .toUTCString(),
उपयोगकर्ता के स्थानीय समय में दिनांक प्रदर्शित करने के लिए, उपयोग करें .toString()

एमडीएन पर अधिक जानकारी | दिनांक और यह उत्तर

पुराने इंटरनेट एक्सप्लोरर संगतता के लिए (IE संस्करण 9 से कम तारीख निर्माणकर्ता में आईएसओ प्रारूप का समर्थन नहीं करते हैं), आपको इसे भागों में डेटाइम स्ट्रिंग प्रतिनिधित्व को विभाजित करना चाहिए और फिर आप डेटाइम भागों का उपयोग करके कंस्ट्रक्टर का उपयोग कर सकते हैं, जैसे new Date('2011', '04' - 1, '11', '11', '51', '00'):। ध्यान दें कि महीने की संख्या 1 कम होनी चाहिए।


वैकल्पिक विधि - एक उपयुक्त पुस्तकालय का उपयोग करें:

आप लाइब्रेरी Moment.js का लाभ भी ले सकते हैं जो निर्दिष्ट समय क्षेत्र के साथ पार्सिंग की तारीख की अनुमति देता है।


मुझे उसी "नान" मुद्दे के लिए सफारी के लिए "स्प्लिट द स्ट्रींग" पद्धति का भी उपयोग करना पड़ा, जो पॉल टॉम्बलिन ने लाया था। नई तारीख ('2011-04-11 11:51:00') 'अमान्य तारीख' लौटाएगा।
आमोस

1
@ एम्स: पत्र टी को नोटिस करें, जो दिनांक और समय को अलग करता है। यदि आप लिखते हैं new Date('2011-04-11T11:51:00')तो बनाई गई तारीख वैध है।
पावेल होडेक

दुर्भाग्य से मैं इस मुद्दे पर टकरा गया कि * यह सभी उपयोगकर्ताओं के लिए काम नहीं करता है
रोमन पोडलिनोव

3
दिनांक वस्तु को बनाने के लिए डेट पार्स ए स्ट्रिंग सबसे खराब तरीका है। स्ट्रिंग को मैन्युअल रूप से पार्स करने के लिए बेहतर है और डेट को कंस्ट्रक्टर के रूप में कॉल करें। कुछ ब्राउज़र UTC के रूप में समय के बिना एक ISO स्ट्रिंग का इलाज करेंगे, अन्य स्थानीय के रूप में।
RobG

6
@ बेन टालियाडोरोस: हां, यह सभी सामान्य ब्राउज़रों new Date('1970-30-02')में अमान्य है , अमान्य दिनांक है क्योंकि एक वर्ष में 30 महीने नहीं होते हैं। आप महीनों तक नहीं बह सकते हैं, लेकिन जब आप दिनों को ओवरफ्लो करते हैं, तब यह क्रोम और फ़ायरफ़ॉक्स में एक वैध तारीख को हल होता है : new Date('1970-02-30')तब नई तारीख ('1970-03-02') के समान दिन होता है।
पावेल होडेक

291

दुर्भाग्य से मुझे यह पता चला

var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());

रिटर्न "बुध अप्रैल 02 2014"। मुझे पता है कि यह पागल लगता है, लेकिन यह कुछ उपयोगकर्ताओं के लिए होता है।

बुलेटप्रूफ समाधान निम्नलिखित है:

var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]); 
console.log(mydate.toDateString());


45
यह सब पर पागल नहीं है, समायोजन सबसे अधिक संभावना के कारण होता है डीएसटी में लात। के प्रारूप में दिनांक yyyy-MM-ddUTC और के रूप में पार्स कर रहे हैं toString रिटर्न स्थानीय समय इसलिए आधार पर उपयोगकर्ताओं समय क्षेत्र पर यह सबसे निश्चित रूप से अलग-अलग परिणाम लौट सकते हैं। यदि हमेशा UTC के रूप में समय चाहते हैं तो आपको toUTCString का उपयोग करना चाहिए ।
जेम्स

इस पर मेरा सिर पीटने लगा। यह काम करने लगता है, लेकिन मुझे समझ में नहीं आता है कि आपने भागों का उपयोग क्यों किया है [0] -1 और न केवल भागों [0]।
एडम यंगर्स

4
@AadYoungers जावास्क्रिप्ट के कारण महीनों की गिनती 0: जनवरी - 0, फरवरी - 1, आदि
रोमन पॉडलिनोव

1
यह उत्तर बताता है कि उदाहरण में व्यवहार गलत है। युक्ति के अनुसार: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… (देखें: datestring) उदाहरण में आउटपुट किया गया मान सही होगा
जेम्स रॉस

124
var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));

और उत्पादन होगा:

dt => Date {Fri Apr 26 2013}

5
दुर्भाग्य से इस समाधान के साथ एक मुद्दा है। यहाँ विवरण: stackoverflow.com/questions/17959660/…
रोमन पॉडलिनोव

आउटपुट अज्ञात है, क्योंकि आपका कोड न तो कुछ स्ट्रिंग में परिवर्तित करता है, और न ही आउटपुट कुछ भी।
रॉबर्ट सिएमर

81
function stringToDate(_date,_format,_delimiter)
{
            var formatLowerCase=_format.toLowerCase();
            var formatItems=formatLowerCase.split(_delimiter);
            var dateItems=_date.split(_delimiter);
            var monthIndex=formatItems.indexOf("mm");
            var dayIndex=formatItems.indexOf("dd");
            var yearIndex=formatItems.indexOf("yyyy");
            var month=parseInt(dateItems[monthIndex]);
            month-=1;
            var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
            return formatedDate;
}

stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")

3
न केवल यूएस स्वरूपण
मार्क जोन्स

4
@MarkJones .indexOf()पद्धति पर भरोसा न करें क्योंकि यह पॉलीफ़िल के बिना संगत ब्राउज़र पार नहीं करता है। इसके बजाय, अधिक संगत .match()या .test()वेनिला जेएस विधियों का उपयोग करें।
अलेक्जेंडर डिक्सन

1
var _delimiter = _format.match(/\W/g)[0];फ़ंक्शन की शुरुआत में जोड़कर आप 3 पैरामीटर के स्वचालित रूप से सीमांकक और प्रीस्काइंड प्राप्त कर सकते हैं।
कैम्प्सजोस

39

moment.js ( http://momentjs.com/ ) उपयोग की तारीखों के लिए एक पूर्ण और अच्छा पैकेज है और आईएसओ 8601 स्ट्रिंग्स का समर्थन करता है

आप एक स्ट्रिंग तिथि और प्रारूप जोड़ सकते हैं।

moment("12-25-1995", "MM-DD-YYYY");

और आप देख सकते हैं कि क्या तारीख मान्य है।

moment("not a real date").isValid(); //Returns false

कुछ उदाहरण दिखाते हैं

let dt = moment("02-01-2019", "MM-DD-YYYY");
console.log(dt.fromNow()+' |'+dt.format('LL')) 
// output: "3 months ago | February 1, 2019"

प्रलेखन देखें http://momentjs.com/docs/#/parsing/string-format/

सिफारिश: मैं उन तारीखों के लिए एक पैकेज का उपयोग करने की सलाह देता हूं जिनमें बहुत सारे प्रारूप हैं क्योंकि समयक्षेत्र और प्रारूप समय प्रबंधन वास्तव में एक बड़ी समस्या है, पल js बहुत सारे स्वरूपों को हल करते हैं। आप एक साधारण स्ट्रिंग से तारीख तक आसानी से पार्स कर सकते हैं, लेकिन मुझे लगता है कि सभी प्रारूपों और तारीखों के बदलाव का समर्थन करने के लिए एक कठिन काम है।


1
कुछ प्रदर्शन उदाहरण let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL')) आउटपुट: "3 महीने पहले | 1 फरवरी, 2019"
CPHPython

36

दिनांक () के तर्क के रूप में इसे पास करें:

var st = "date in some format"
var dt = new Date(st);

आप उदाहरण के लिए दिनांक, माह, वर्ष का उपयोग कर सकते हैं dt.getMonth():।


8
मैं करता हूँ console.log(new Date('30-08-2018'))और अमान्य दिनांक मिल
Dwigh

यह उत्तर इस समस्या के लिए कई जटिलताओं को अनदेखा करता है, उदाहरण के लिए, अगर मैं 01/02/2020अपने कंप्यूटर पर (यूके में) एक तारीख के लिए ऐसा करता हूं तो यह 1 फरवरी को वापस आ जाएगा, जहां अगर अमेरिका में ऐसा ही किया जाता है तो यह 2 जनवरी को वापस आ जाएगा। आप बहुत ज्यादा इस भोली कार्यान्वयन का उपयोग कभी नहीं करना चाहिए। इसके बजाय पल का उपयोग करें ।
लियाम

23

यदि आप भयानक पल लाइब्रेरी (उदाहरण के लिए Node.js प्रोजेक्ट में) का उपयोग कर सकते हैं, तो आप आसानी से उदाहरण के लिए अपनी तिथि को पार्स कर सकते हैं

var momentDate = moment("2014-09-15 09:00:00");

और के माध्यम से जेएस दिनांक वस्तु का उपयोग कर सकते हैं

momentDate ().toDate();

5
कृपया ध्यान दें कि वह क्षण नोड के बिना ठीक काम करता है
5

मुझे इस कोड का उपयोग करते समय अपने Android और IOS उपकरणों में NaN त्रुटि मिली, हालांकि यह डेस्कटॉप में काम कर रहा था। यहाँ वह कोड है जो मैं पहले इस्तेमाल कर रहा था: var dateTimeOfTimeIn = new Date (वर्ष + "-" + महीना + "-" + दिन + "T" + data.timeIn); इस दृष्टिकोण और क्षण पुस्तकालय का उपयोग करके, मेरी समस्या हल हो गई और मेरा कोड अब मेरे सभी उपकरणों में ठीक काम कर रहा है!
मेहदी

20

new Date(2000, 10, 1) आपको "बुध नवम्बर 01 2000 00:00:00 GMT + 0100 (CET)" देगा

देखें कि महीने के लिए 0 आपको जनवरी देता है


19

उन लोगों के लिए जो एक छोटे और स्मार्ट समाधान की तलाश कर रहे हैं:

String.prototype.toDate = function(format)
{
  var normalized      = this.replace(/[^a-zA-Z0-9]/g, '-');
  var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-');
  var formatItems     = normalizedFormat.split('-');
  var dateItems       = normalized.split('-');

  var monthIndex  = formatItems.indexOf("mm");
  var dayIndex    = formatItems.indexOf("dd");
  var yearIndex   = formatItems.indexOf("yyyy");
  var hourIndex     = formatItems.indexOf("hh");
  var minutesIndex  = formatItems.indexOf("ii");
  var secondsIndex  = formatItems.indexOf("ss");

  var today = new Date();

  var year  = yearIndex>-1  ? dateItems[yearIndex]    : today.getFullYear();
  var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1;
  var day   = dayIndex>-1   ? dateItems[dayIndex]     : today.getDate();

  var hour    = hourIndex>-1      ? dateItems[hourIndex]    : today.getHours();
  var minute  = minutesIndex>-1   ? dateItems[minutesIndex] : today.getMinutes();
  var second  = secondsIndex>-1   ? dateItems[secondsIndex] : today.getSeconds();

  return new Date(year,month,day,hour,minute,second);
};

उदाहरण:

"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
"2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");

एक जादू की तरह काम करता है! तुमने मेरी जान बचा ली!
स्टीव नोसे


12

यदि आप प्रारूप "dd / MM / yyyy" से बदलना चाहते हैं। यहाँ एक उदाहरण है:

var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
var arrayDate = stringDate.match(pattern);
var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]);

यह समाधान 9 से कम IE संस्करणों में काम करता है।


12

टाइमस्टैम्प को एक नंबर पर डाला जाना चाहिए

var ts = '1471793029764';
ts = Number(ts); // cast it to a Number
var date = new Date(ts); // works

var invalidDate = new Date('1471793029764'); // does not work. Invalid Date

1
undefinedमूल्य के बारे में क्या ? जैसे var date = new Date(undefined):?
बेनी न्युगबॉएर

यदि आप इसे डेट कंस्ट्रक्टर को पास करने का प्रयास करते हैं, तो @BennyNeugebauer अच्छी तरह से जांच लें कि कोई मान अपरिभाषित है या नहीं। हो सकता है कि आप एक अपवाद फेंकना चाहते हों या हो सकता है कि आप एक डिफ़ॉल्ट तिथि पर वापस आना चाहते हों, कौन जानता है?
भाग्यशाली सोनी

9

Date.parseलगभग वही मिलता है जो आप चाहते हैं। यह am/ pmभाग पर चोट करता है , लेकिन कुछ हैकिंग के साथ आप इसे काम कर सकते हैं:

var str = 'Sun Apr 25, 2010 3:30pm',
    timestamp;

timestamp = Date.parse(str.replace(/[ap]m$/i, ''));

if(str.match(/pm$/i) >= 0) {
    timestamp += 12 * 60 * 60 * 1000;
}

6

प्रारूप में बदलें pt-BR:

    var dateString = "13/10/2014";
    var dataSplit = dateString.split('/');
    var dateConverted;

    if (dataSplit[2].split(" ").length > 1) {

        var hora = dataSplit[2].split(" ")[1].split(':');
        dataSplit[2] = dataSplit[2].split(" ")[0];
        dateConverted = new Date(dataSplit[2], dataSplit[1]-1, dataSplit[0], hora[0], hora[1]);

    } else {
        dateConverted = new Date(dataSplit[2], dataSplit[1] - 1, dataSplit[0]);
    }

मुझे आशा है कि किसी की मदद करो !!!


5

मैंने इसके लिए एक फिडेल बनाया है, आप किसी भी तारीख स्ट्रिंग पर टॉड () फ़ंक्शन का उपयोग कर सकते हैं और तिथि प्रारूप प्रदान कर सकते हैं। यह आपको एक दिनांक ऑब्जेक्ट लौटाएगा। https://jsfiddle.net/Sushil231088/q56yd0rp/

"17/9/2014".toDate("dd/MM/yyyy", "/")

4

Js i use में स्ट्रिंग टू डेट करने के लिए http://momentjs.com/

moment().format('MMMM Do YYYY, h:mm:ss a'); // August 16th 2015, 4:17:24 pm
moment().format('dddd');                    // Sunday
moment().format("MMM Do YY");               // Aug 16th 15
moment().format('YYYY [escaped] YYYY');     // 2015 escaped 2015
moment("20111031", "YYYYMMDD").fromNow(); // 4 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow();        // 16 hours ago
moment().endOf('day').fromNow();          // in 8 hours

1
पल () डिफ़ॉल्ट रूप से वर्तमान दिनांक लेता है। स्ट्रिंग का प्रारूप कैसे करें जो "2016-06-27 17: 49: 51.951602 + 05: 30" प्रारूप में है।
ज़ोरान777

4

मैंने किसी भी Date Object को UTC Date Object में बदलने के लिए यह फ़ंक्शन किया।

function dateToUTC(date) {
    return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}


dateToUTC(new Date());

3

फिर भी इसे करने का एक और तरीका:

String.prototype.toDate = function(format) {
    format = format || "dmy";
    var separator = this.match(/[^0-9]/)[0];
    var components = this.split(separator);
    var day, month, year;
    for (var key in format) {
        var fmt_value = format[key];
        var value = components[key];
        switch (fmt_value) {
            case "d":
                day = parseInt(value);
                break;
            case "m":
                month = parseInt(value)-1;
                break;
            case "y":
                year = parseInt(value);
        }
    }
    return new Date(year, month, day);
};
a = "3/2/2017";
console.log(a.toDate("dmy"));
// Date 2017-02-03T00:00:00.000Z

आह! साफ! अंत में एक कोड जो भी विभाजक का उपयोग किया जाता है उसका ख्याल रखता है।
सैम सिर्री

3

आप यह कोशिश कर सकते हैं:

function formatDate(userDOB) {
  const dob = new Date(userDOB);

  const monthNames = [
    'January', 'February', 'March', 'April', 'May', 'June', 'July',
     'August', 'September', 'October', 'November', 'December'
  ];

  const day = dob.getDate();
  const monthIndex = dob.getMonth();
  const year = dob.getFullYear();

  // return day + ' ' + monthNames[monthIndex] + ' ' + year;
  return `${day} ${monthNames[monthIndex]} ${year}`;
}

console.log(formatDate('1982-08-10'));


2
var date = new Date(year, month, day);

या

var date = new Date('01/01/1970');

दिनांक स्ट्रिंग स्ट्रिंग स्वरूप में '01 -01-1970 'फायरफॉक्स में काम नहीं करेगा, इसलिए दिनांक प्रारूप स्ट्रिंग में "-" के बजाय "/" का बेहतर उपयोग करें।


मेरी स्ट्रिंग "2015/08/03 13:06:16" है FF में यह काम नहीं कर रहा है
धारा

2

यदि आपको दिनांक प्रारूप को परिवर्तित करने से पहले स्ट्रिंग की सामग्री को जांचना है:

// Convert 'M/D/YY' to Date()
mdyToDate = function(mdy) {
  var d = mdy.split(/[\/\-\.]/, 3);

  if (d.length != 3) return null;

  // Check if date is valid
  var mon = parseInt(d[0]), 
      day = parseInt(d[1]),
      year= parseInt(d[2]);
  if (d[2].length == 2) year += 2000;
  if (day <= 31 && mon <= 12 && year >= 2015)
    return new Date(year, mon - 1, day);

  return null; 
}

2

मैंने स्ट्रिंग को दिनांक ऑब्जेक्ट में बदलने के लिए parseDateTime फ़ंक्शन बनाया है और यह सभी ब्राउज़र (IE ब्राउज़र सहित) में काम कर रहा है, अगर किसी को भी आवश्यक हो, तो जांच लें, संदर्भ https://github.com/Umesh-Markande/Parse-String-to-Date -इन सभी-ब्राउज़र

    function parseDateTime(datetime) {
            var monthNames = [
                "January", "February", "March",
                "April", "May", "June", "July",
                "August", "September", "October",
                "November", "December"
              ];
            if(datetime.split(' ').length == 3){
                var date = datetime.split(' ')[0];
                var time = datetime.split(' ')[1].replace('.00','');
                var timearray = time.split(':');
                var hours = parseInt(time.split(':')[0]);
                var format = datetime.split(' ')[2];
                var bits = date.split(/\D/);
                date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                var day = date.getDate();
                var monthIndex = date.getMonth();
                var year = date.getFullYear();
                if ((format === 'PM' || format === 'pm') && hours !== 12) {
                    hours += 12;
                    try{  time = hours+':'+timearray[1]+':'+timearray[2] }catch(e){ time = hours+':'+timearray[1] }
                } 
                var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + '  ' + year + ' ' + time);
                return formateddatetime;
            }else if(datetime.split(' ').length == 2){
                var date = datetime.split(' ')[0];
                var time = datetime.split(' ')[1];
                var bits = date.split(/\D/);
                var datetimevalue = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                var day = datetimevalue.getDate();
                var monthIndex = datetimevalue.getMonth();
                var year = datetimevalue.getFullYear();
                var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + '  ' + year + ' ' + time);
                return formateddatetime;
            }else if(datetime != ''){
                var bits = datetime.split(/\D/);
                var date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                return date;
            }
            return datetime;
        }

    var date1 = '2018-05-14 05:04:22 AM';   // yyyy-mm-dd hh:mm:ss A
    var date2 = '2018/05/14 05:04:22 AM';   // yyyy/mm/dd hh:mm:ss A
    var date3 = '2018/05/04';   // yyyy/mm/dd
    var date4 = '2018-05-04';   // yyyy-mm-dd
    var date5 = '2018-05-14 15:04:22';   // yyyy-mm-dd HH:mm:ss
    var date6 = '2018/05/14 14:04:22';   // yyyy/mm/dd HH:mm:ss

    console.log(parseDateTime(date1))
    console.log(parseDateTime(date2))
    console.log(parseDateTime(date3))
    console.log(parseDateTime(date4))
    console.log(parseDateTime(date5))
    console.log(parseDateTime(date6))

**Output---**
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Mon May 14 2018 15:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 14:04:22 GMT+0530 (India Standard Time)

यह एक मेरे लिए काम किया। धन्यवाद।
क्रिस डी। एमर्सन

2

यह उत्तर कासेम के उत्तर पर आधारित है, लेकिन यह दो अंकों के वर्षों को भी संभालता है। मैंने कसीम के उत्तर के लिए एक संपादन प्रस्तुत किया, लेकिन अगर यह स्वीकृत नहीं था, तो मैं इसे एक अलग उत्तर के रूप में भी प्रस्तुत कर रहा हूं।

function stringToDate(_date,_format,_delimiter) {
        var formatLowerCase=_format.toLowerCase();
        var formatItems=formatLowerCase.split(_delimiter);
        var dateItems=_date.split(_delimiter);
        var monthIndex=formatItems.indexOf("mm");
        var dayIndex=formatItems.indexOf("dd");
        var yearIndex=formatItems.indexOf("yyyy");
        var year = parseInt(dateItems[yearIndex]); 
        // adjust for 2 digit year
        if (year < 100) { year += 2000; }
        var month=parseInt(dateItems[monthIndex]);
        month-=1;
        var formatedDate = new Date(year,month,dateItems[dayIndex]);
        return formatedDate;
}

stringToDate("17/9/14","dd/MM/yyyy","/");
stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")

1

आप रेगेक्स का उपयोग करके स्ट्रिंग को पार्स करने के लिए विस्तार से समय और फिर तारीख या कोई रिटर्न फॉर्मेट बना सकते हैं:

//example : let dateString = "2018-08-17 01:02:03.4"

function strToDate(dateString){
    let reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).(\d{1})/
  , [,year, month, day, hours, minutes, seconds, miliseconds] = reggie.exec(dateString)
  , dateObject = new Date(year, month-1, day, hours, minutes, seconds, miliseconds);
  return dateObject;
}
alert(strToDate(dateString));

1

प्रदर्शन

आज (2020/05/08) मैं चुना समाधान के लिए परीक्षण करने - दो मामलों के लिए: इनपुट तारीख ISO8601 स्ट्रिंग है (विज्ञापन, बीडी, Cd, डीडी, एड) और इनपुट तारीख है टाइमस्टैम्प (At, Ct, Dt) है। समाधान बीडी, सीडी, सीटी परिणाम के रूप में जेएस डेट ऑब्जेक्ट वापस नहीं करते हैं, लेकिन मैं उन्हें जोड़ता हूं क्योंकि वे उपयोगी हो सकते हैं लेकिन मैं उन्हें वैध समाधानों के साथ तुलना नहीं करता हूं। यह परिणाम बड़े पैमाने पर तिथि पार्सिंग के लिए उपयोगी हो सकते हैं।

निष्कर्ष

  • समाधान new Date (विज्ञापन) आईएसओ तिथि और टाइमस्टैम्प के लिए सभी ब्राउज़रों के लिए क्षण (जेडडी) से 50-100x तेज है
  • समाधान new Date(विज्ञापन) ~ 10x से अधिक तेज हैparseDate (एड) की
  • Date.parseयदि सभी ब्राउज़र पर आईएसओ तिथि से टाइमस्टैम्प प्राप्त करने की आवश्यकता है तो समाधान (बीडी) सबसे तेज़ है

यहाँ छवि विवरण दर्ज करें

विवरण

मैं क्रोम 81.0, सफारी 13.1, फ़ायरफ़ॉक्स 75.0 पर मैको हाई सिएरा 10.13.6 पर टेस्ट करता हूं। समाधान parseDate(एड) उपयोग new Date(0)और मैन्युअल रूप से सेट यूटीसी तारीख घटक।

क्रोम के लिए परिणाम

यहाँ छवि विवरण दर्ज करें


0

आईएसओ 8601-एसक डेटस्ट्रीम, मानक के रूप में उत्कृष्ट है, अभी भी व्यापक रूप से समर्थित नहीं हैं।

यह पता लगाने के लिए एक बढ़िया संसाधन है कि आपको किस डेटा स्वरूप का उपयोग करना चाहिए:

http://dygraphs.com/date-formats.html

हां, इसका अर्थ है कि आपका डेटास्ट्रिंग उतना ही सरल हो सकता है जितना कि विरोध किया जा सकता है

"2014/10/13 23:57:52" के बजाय "2014-10-13 23:57:52"


0
                //little bit of code for Converting dates 

                var dat1 = document.getElementById('inputDate').value;
                var date1 = new Date(dat1)//converts string to date object
                alert(date1);
                var dat2 = document.getElementById('inputFinishDate').value;
                var date2 = new Date(dat2)
                alert(date2);

0

इस कोड का उपयोग करें: (मेरी समस्या इस कोड के साथ हल की गई थी)

function dateDiff(date1, date2){
var diff = {}                           // Initialisation du retour
var tmp = date2 - date1;

tmp = Math.floor(tmp/1000);             // Nombre de secondes entre les 2 dates
diff.sec = tmp % 60;                    // Extraction du nombre de secondes

tmp = Math.floor((tmp-diff.sec)/60);    // Nombre de minutes (partie entière)
diff.min = tmp % 60;                    // Extraction du nombre de minutes

tmp = Math.floor((tmp-diff.min)/60);    // Nombre d'heures (entières)
diff.hour = tmp % 24;                   // Extraction du nombre d'heures

tmp = Math.floor((tmp-diff.hour)/24);   // Nombre de jours restants
diff.day = tmp;

return diff;

}


3
कृपया अपना उत्तर बताएं
Mazz

तारीख 1 और तारीख 2 मापदंडों का प्रारूप तारीख के रूप में सही होना चाहिए।
फेट्रा

समारोह नाम वापसी की तारीख अलग है। यदि आप चाहते हैं कि दिन की संख्या बस इस तरह से लौटे: var result = dateDiff (date1, date2); var day_number = result.day; यह आसान है
Fetra

0

मैंने एक पुन: प्रयोज्य फ़ंक्शन लिखा था जिसका उपयोग मैं तब करता हूं जब मुझे सर्वर से तारीख के तार मिलते हैं।
आप अपने वांछित परिसीमन (/ - आदि ..) को पारित कर सकते हैं जो split()विधि का उपयोग करने के लिए दिन महीने और वर्ष को अलग करता है ।
आप इसे इस कार्य उदाहरण पर देख और परख सकते हैं ।

<!DOCTYPE html>
<html>
  <head>
    <style>
    </style>
  </head>
  <body>
    <div>
      <span>day:
      </span> 
      <span id='day'>
      </span>
    </div>
    <div>
      <span>month:
      </span> 
      <span id='month'>
      </span>
    </div>
    <div>
      <span>year:
      </span> 
      <span id='year'>
      </span>
    </div>
    <br/>
    <input type="button" id="" value="convert" onClick="convert('/','28/10/1980')"/>
    <span>28/10/1980
    </span>
    <script>
      function convert(delimiter,dateString)
      {
        var splitted = dateString.split('/');
        // create a new date from the splitted string 
        var myDate = new Date(splitted[2],splitted[1],splitted[0]);
        // now you can access the Date and use its methods 
        document.getElementById('day').innerHTML = myDate.getDate();
        document.getElementById('month').innerHTML = myDate.getMonth();
        document.getElementById('year').innerHTML = myDate.getFullYear();
      }
    </script>
  </body>
</html>

0

फिर भी एक और तरीका यह है कि प्रारूप स्ट्रिंग पर कैप्चर किए गए समूहों के नाम के साथ एक regex का निर्माण करें और फिर तारीख स्ट्रिंग से दिन, महीने और वर्ष निकालने के लिए उस regex का उपयोग करें:

function parseDate(dateStr, format) {
  const regex = format.toLocaleLowerCase()
    .replace(/\bd+\b/, '(?<day>\\d+)')
    .replace(/\bm+\b/, '(?<month>\\d+)')
    .replace(/\by+\b/, '(?<year>\\d+)')
  
  const parts = new RegExp(regex).exec(dateStr) || {};
  const { year, month, day } = parts.groups || {};
  return parts.length === 4 ? new Date(year, month-1, day) : undefined;
}

const printDate = x => console.log(x ? x.toLocaleDateString() : x);

printDate(parseDate('05/11/1896', 'dd/mm/YYYY'));
printDate(parseDate('07-12-2000', 'dd-mm-yy'));
printDate(parseDate('07:12:2000', 'dd:mm:yy'));
printDate(parseDate('2017/6/3', 'yy/MM/dd'));
printDate(parseDate('2017-6-15', 'y-m-d'));
printDate(parseDate('2015 6 25', 'y m d'));
printDate(parseDate('2015625', 'y m d')); // bad format


अच्छा समाधान है, लेकिन आप शायद इस बात से अवगत नहीं हैं कि फ़ायरफ़ॉक्स अभी भी RegExp नाम वाले समूहों का समर्थन नहीं करता है - Bugzilla.mozilla.org/show_bug.cgi?id=1362154 (PS: PS: यह मैं नहीं हूँ जिसने आपके उत्तर को
अस्वीकार कर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.