जावास्क्रिप्ट में प्रारूप विनिर्देश के साथ मैं स्ट्रिंग को डेटाइम में कैसे बदल सकता हूं?


208

मैं एक स्ट्रिंग को प्रारूप स्ट्रिंग निर्दिष्ट करके जावास्क्रिप्ट में दिनांक समय ऑब्जेक्ट में कैसे परिवर्तित कर सकता हूं?

मैं कुछ इस तरह की तलाश में हूँ:

var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");

2
BTW डॉट्स और हाइफ़न दिनांक विभाजकों के रूप में विफल हो सकते हैं, स्लैश ठीक हैं, इसलिए (मेरे परीक्षणों की सीमा तक) जावास्क्रिप्ट "2011/08/22 10:30:00" को स्वीकार करेगा लेकिन अभी तक (आईएसओ 8601 के बावजूद) "2011-09 -02 15:58:40 "जो - यह दावा किया जाता है - जावास्क्रिप्ट 1.8.5 पर समर्थित है।
डेव एवरिट

Date.parse फ़ंक्शन दिनांक स्ट्रिंग को पार्स करता है जो "mm / dd / yyyy" प्रारूप में है। कृपया Parse को लागू करने से पहले स्ट्रिंग को "mm / dd / yyyy" प्रारूप में बदलें।

क्यों आवश्यक प्रारूप में तारीख की आपूर्ति नहीं? मैं इसे नई तारीख की तरह ('2012 11 25 18:00:00); और यह काम करता है!
फॉक्सबागगा

जवाबों:


88

मुझे लगता है कि यह आपकी मदद कर सकता है: http://www.mattkruse.com/javascript/date/

एक getDateFromFormat()समारोह है कि आप अपनी समस्या को हल करने के लिए थोड़ा ट्वीक कर सकते हैं।

अद्यतन: javascripttoolbox.com पर उपलब्ध नमूनों का एक अद्यतन संस्करण है


5
TypeError: Object Date has no method 'getDateFromFormat'
डेरेक 會 功夫 ere

6
GetDateFromFormat विधि ऊपर दिए गए लिंक पर, डॉक्टर के पास उपलब्ध है। स्रोत यहां उपलब्ध है: mattkruse.com/javascript/date/source.html
राफेल मुलर

1
+1, अच्छी लाइब्रेरी..प्राकृतिक जावास्क्रिप्ट ... यह शानदार है। धन्यवाद
सुरेंद्र Jnawali

7
दोनों लिंक मर चुके हैं
साइथम

1
यदि आप कर सकते हैं, तो कृपया लिंक को अपडेट करें। यह अब और मदद नहीं करता है।
तल्लीलेई

98

यदि आपका तार संगत है तो उपयोग करें । यदि आपका प्रारूप असंगत है (मुझे लगता है कि यह है), तो आपको अपने आप को स्ट्रिंग को पार्स करना होगा (नियमित अभिव्यक्तियों के साथ आसान होना चाहिए) और वर्ष, महीने, तिथि, घंटे, मिनट और दूसरे के लिए स्पष्ट मूल्यों के साथ एक नई तिथि ऑब्जेक्ट बनाएं ।new Date(dateString)Date.parse()


1
Date.parse सबसे अच्छा समाधान है! यह लगभग सब कुछ पार्स! +1
.नाज़

7
@ अयाज: ALMOST अमेरिका में इस्तेमाल होने वाली हर चीज, लेकिन यूरोप के बड़े हिस्से द्वारा इस्तेमाल किए गए फॉर्मेट को गायब करना बहुत बड़ा "लगभग" है। लेकिन नई तिथि कस्टम कार्यों के लिए एक अच्छा आधार है।
पावेल वी।

मेरे लिए नया दिनांक (dateString) ठीक काम किया। Date.parse () इसके बजाय मिलीसेकंड में कनवर्ट करता है और इसलिए नंबर नहीं एक दिनांक प्रकार देता है।
रीगन ओचोरा

68

@Christoph Mentions समस्या से निपटने के लिए एक regex का उपयोग करता है। यहाँ मैं उपयोग कर रहा हूँ:

var dateString = "2010-08-09 01:02:03";
var reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
var dateArray = reggie.exec(dateString); 
var dateObject = new Date(
    (+dateArray[1]),
    (+dateArray[2])-1, // Careful, month starts at 0!
    (+dateArray[3]),
    (+dateArray[4]),
    (+dateArray[5]),
    (+dateArray[6])
);

यह किसी भी तरह से बुद्धिमान नहीं है, बस regex को कॉन्फ़िगर करें और new Date(blah)अपनी आवश्यकताओं के अनुरूप करें।

संपादित करें: शायद विनाशकारी का उपयोग करते हुए ES6 में थोड़ा और अधिक समझने योग्य है:

let dateString = "2010-08-09 01:02:03"
  , reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
  , [, year, month, day, hours, minutes, seconds] = reggie.exec(dateString)
  , dateObject = new Date(year, month-1, day, hours, minutes, seconds);

लेकिन इन दिनों सभी ईमानदारी में मैं कुछ पल के लिए पहुंचता हूं


19
@ bažmegakapa रोने के बजाय आप शायद जवाब को संपादित कर सकते हैं और 'var' खुद को जोड़ सकते हैं?
कार्बनिकपांडा

आप /gध्वज का उपयोग क्यों कर रहे हैं , केवल बाद में सेट lastIndexकरने के लिए 0? बस एक वैश्विक मैच का उपयोग न करें।
Ry-

1
@minitech /gएक मौजूदा परियोजना से एक मैला कॉपी / पेस्ट था। lastindexएक संपादक द्वारा जोड़ा गया था ( \gI suppose का मुकाबला करने के लिए ?)। मैं अब उन्हें निकाल दूंगा। उसे इंगित करने के लिए धन्यवाद।
ऑर्गेनिकपांडा

1
बहुत अच्छा एवर .. मेरे लिए उपयोगी है
जेथिक

14

कोई भी परिष्कृत दिनांक / समय स्वरूपण दिनचर्या जावास्क्रिप्ट में मौजूद नहीं है।

आपको फॉर्मेट की गई डेट आउटपुट के लिए एक बाहरी लाइब्रेरी का उपयोग करना होगा, फ्लैगेंट बदसरी से "जावास्क्रिप्ट डेट फॉर्मेट" बहुत ही आशाजनक लगता है।

इनपुट रूपांतरण के लिए, पहले से ही कई सुझाव दिए गए हैं। :)


3
"है" रिश्तेदार है। बेशक आप अपने खुद के कार्यान्वयन का निर्माण कर सकते हैं। :)
तोमलक

13

Moment.js की जाँच करें । यह एक आधुनिक और शक्तिशाली पुस्तकालय है जो जावास्क्रिप्ट की शोकपूर्ण तिथि कार्यों (या इसके अभाव) के लिए बनाता है।


3
मैं नीचे नहीं गया, लेकिन शायद यह जानकर अच्छा लगा होगा कि मोमेंट.जे में कौन सा कार्य वांछित व्यवहार देगा (हमारे लिए आलसी लोग जो पहले से ही मोमेंट। जेएस का उपयोग कर रहे हैं, लेकिन उपयोग करने के लिए विशेष फ़ंक्शन को नहीं जानते हैं) ।
मैट

स्थानीयकरण आशाजनक लगता है, डॉट प्रारूप के लिए किसी भी केंद्रीय-यूरोपीय स्थान को चुनें। हालाँकि, मैंने इसका परीक्षण नहीं किया था और मैंने जो उदाहरण देखे हैं, उनमें पूर्ण डेटाटाइम प्रारूप नहीं है।
पावेल वी।

मैं निराश नहीं हुआ, लेकिन मैं सिर्फ यह बताना चाहता था कि यह धीमा है। डेस्कटॉप के लिए ठीक है, लेकिन मोबाइल बहुत धीमा हो सकता है (आपकी आवश्यकताओं के आधार पर)।
गबन g

11

बस यहाँ एक अद्यतन जवाब के लिए, http://www.datejs.com/ पर एक अच्छा js lib है

डेटज पार्सिंग, फॉर्मेटिंग और प्रोसेसिंग के लिए एक ओपन सोर्स जावास्क्रिप्ट डेट लाइब्रेरी है।


लुढ़का हुआ वह संपादन, हालांकि बहुत मददगार इसे एक टिप्पणी या अलग उत्तर के रूप में जोड़ा जाना चाहिए।
एलेक्सिस अब्रील

यह वैसे भी एक टिप्पणी के लिए बहुत लंबा था, और एक दोहराया गया उत्तर जोड़ना गलत है। इस सवाल पर 155,000 से अधिक बार देखा गया है - चलो इन लोगों को अधिक से अधिक जानकारी दें! (वैसे - यह एक मौजूदा जवाब को संपादित करने के लिए स्टैक ओवरफ्लो में बहुत आम है - आप शायद बुरा महसूस करेंगे अगर मैंने सिर्फ आपके उत्तर की नकल की ...)
कोबी

1
और वैसे भी, अगर आपको मेरा संपादन पसंद नहीं है जो ठीक है, लेकिन कृपया अपने उत्तर का विस्तार करें - "बस यहां एक अद्यतन उत्तर के लिए" एक भराव है, और यह कुछ विवरणों को याद कर रहा है। इस सवाल पर फिलहाल कुछ ध्यान दिया जा रहा है, जिस कारण से आपको अचानक 5 वोट मिले।
कोबी

7
var temp1 = "";
var temp2 = "";

var str1 = fd; 
var str2 = td;

var dt1  = str1.substring(0,2);
var dt2  = str2.substring(0,2);

var mon1 = str1.substring(3,5);
var mon2 = str2.substring(3,5);

var yr1  = str1.substring(6,10);  
var yr2  = str2.substring(6,10); 

temp1 = mon1 + "/" + dt1 + "/" + yr1;
temp2 = mon2 + "/" + dt2 + "/" + yr2;

var cfd = Date.parse(temp1);
var ctd = Date.parse(temp2);

var date1 = new Date(cfd); 
var date2 = new Date(ctd);

if(date1 > date2) { 
    alert("FROM DATE SHOULD BE MORE THAN TO DATE");
}

5

बाहरी पुस्तकालय एक या दो तिथियों को पार्स करने के लिए एक ओवरकिल है, इसलिए मैंने ओली और क्रिस्टोफ के समाधान का उपयोग करके अपना स्वयं का फ़ंक्शन बनाया । यहां मध्य यूरोप में हम शायद ही कभी aything का उपयोग करते हैं, लेकिन OP का प्रारूप, इसलिए यहां उपयोग किए जाने वाले सरल एप्लिकेशन के लिए यह पर्याप्त होना चाहिए।

function ParseDate(dateString) {
    //dd.mm.yyyy, or dd.mm.yy
    var dateArr = dateString.split(".");
    if (dateArr.length == 1) {
        return null;    //wrong format
    }
    //parse time after the year - separated by space
    var spacePos = dateArr[2].indexOf(" ");
    if(spacePos > 1) {
        var timeString = dateArr[2].substr(spacePos + 1);
        var timeArr = timeString.split(":");
        dateArr[2] = dateArr[2].substr(0, spacePos);
        if (timeArr.length == 2) {
            //minutes only
            return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]));
        } else {
            //including seconds
            return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]), parseInt(timeArr[2]))
        }
    } else {
        //gotcha at months - January is at 0, not 1 as one would expect
        return new Date(parseInt(dateArr[2]), parseInt(dateArr[1] - 1), parseInt(dateArr[0]));
    }
}

4

Date.parse() काफी बुद्धिमान है, लेकिन मैं इस बात की गारंटी नहीं दे सकता कि प्रारूप सही ढंग से पार्स होगा।

यदि ऐसा नहीं होता है, तो आपको दोनों को पाटने के लिए कुछ खोजना होगा। आपका उदाहरण बहुत सरल है (विशुद्ध रूप से संख्या होने के नाते) इसलिए REGEX का एक स्पर्श (या string.split()- और भी तेज हो सकता है) कुछ के साथ रखा गया है parseInt()जो आपको जल्दी से एक तारीख बनाने की अनुमति देगा।


4
time = "2017-01-18T17:02:09.000+05:30"

t = new Date(time)

hr = ("0" + t.getHours()).slice(-2);
min = ("0" + t.getMinutes()).slice(-2);
sec = ("0" + t.getSeconds()).slice(-2);

t.getFullYear()+"-"+t.getMonth()+1+"-"+t.getDate()+" "+hr+":"+min+":"+sec

प्लस 1 फ़ंक्शन को कॉल करने के बाद getmonth () गलत लगता है
अर्जुनसिंह

t.getMonth () + 1 Date.getMonth () के रूप में सही है, 0 आधारित मान देता है।
जूसी पालो

3

बस मेरा ५ सेंट देना है।

मेरी तिथि का प्रारूप dd.mm.yyyy (यूके प्रारूप) है और उपरोक्त में से कोई भी उदाहरण मेरे लिए काम नहीं कर रहा था। सभी पार्स मिमी को दिन के रूप में और महीने के रूप में डी डी मान रहे थे।

मुझे यह लाइब्रेरी मिली है: http://joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/ और इसने काम किया, क्योंकि आप इस तरह से खेतों का क्रम कह सकते हैं:

>>console.log(new Date(Date.fromString('09.05.2012', {order: 'DMY'})));
Wed May 09 2012 00:00:00 GMT+0300 (EEST)

मुझे उम्मीद है कि किसी की मदद करता है।


लिंक अब मर गया!

अच्छी तरह से ... एक त्वरित अर्काइव ..org दिखाया: bitbucket.org/mazzarelli/js-date/downloads परियोजना url है।
एंटोन वल्लक

1

Moment.js इसे संभाल लेंगे:

var momentDate = moment('23.11.2009 12:34:56', 'DD.MM.YYYY HH:mm:ss');
var date = momentDate.;

1
जबकि क्षण.जेएस महान है, ऐसे उपयोग मामलों की अधिकता है जहां आपको केवल देशी जावास्क्रिप्ट का उपयोग करना है। मेरा वर्तमान उपयोग-मामला काउचडीबी में एक मैप फंक्शन है
Zach Smith

1

आप इसके लिए क्षण.js पुस्तकालय का उपयोग कर सकते हैं। मैं केवल समय-विशिष्ट आउटपुट प्राप्त करने के लिए उपयोग कर रहा हूं, लेकिन आप यह चुन सकते हैं कि आप किस प्रकार का प्रारूप चुनना चाहते हैं।

संदर्भ:

1. पल पुस्तकालय: https://momentjs.com/

2. समय और तारीख विशिष्ट कार्य: https://timestamp.online/article/how-to-convert-timestamp-to-datetime-in-javascript

convertDate(date) {
        var momentDate = moment(date).format('hh : mm A');
        return momentDate;
}

और आप इस विधि को कॉल कर सकते हैं जैसे:

this.convertDate('2020-05-01T10:31:18.837Z');

मुझे उम्मीद है यह मदद करेगा। कोडिंग का आनंद लें।


0

Date.parse को पूरी तरह से संतुष्ट करने के लिए RFC822 में निर्दिष्ट dd-mm-YYYY को स्ट्रिंग में बदलें, यदि आप yyyy-mm-dd पार्स का उपयोग करते हैं तो गलतियाँ हो सकती हैं।


FYI, RFC 822 से (पृष्ठ: 25. आंशिक रूप से टिप्पणी के लिए पाठ की लंबाई को पूरा करने के लिए साफ किया गया): 13 अगस्त, 1982 - 25 - RFC # 822 5. दिनांक और समय विनिर्देश 5.1। SYNTAX दिनांक-समय = [दिन ","] तिथि समय; dd mm yy hh: mm: ss zzz day = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun" date = 1 * 2DIGIT महीने 2DIGIT; दिन महीना वर्ष जैसे 20 जून 82 महीना = "जन" / "फ़रवरी" / "मार्च" / "अप्रैल" / "मई" / "जून" / "जुलाई" / "अगस्त" / "सित" / "अक्टूबर" / " नवंबर "/" दिसंबर "
वैलेंटाइन रस्क

0
//Here pdate is the string date time
var date1=GetDate(pdate);
    function GetDate(a){
        var dateString = a.substr(6);
        var currentTime = new Date(parseInt(dateString ));
        var month =("0"+ (currentTime.getMonth() + 1)).slice(-2);
        var day =("0"+ currentTime.getDate()).slice(-2);
        var year = currentTime.getFullYear();
        var date = day + "/" + month + "/" + year;
        return date;
    }

प्रश्नकर्ता ने एक प्रारूप स्ट्रिंग निर्दिष्ट करने के लिए कहा ।
अरमाली

@ अरमाली इनपुट पैरामीटर जैसे "/ दिनांक (1552415400000) /" स्ट्रिंग प्रारूप में
अभिषेक कानरर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.