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


1397

मैंने देखा कि new Date()कई प्रारूपों में तारीखों को स्वीकार करने में जावास्क्रिप्ट का कार्य बहुत ही स्मार्ट है।

Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")

मैं new Date()फ़ंक्शन को कॉल करते समय सभी मान्य स्ट्रिंग स्वरूपों को दिखाने के लिए कहीं भी प्रलेखन नहीं ढूंढ सका ।

यह एक स्ट्रिंग को डेट में परिवर्तित करने के लिए है। यदि हम विपरीत दिशा को देखते हैं, अर्थात्, किसी स्ट्रिंग को डेट ऑब्जेक्ट को परिवर्तित करना, अब तक मैं इस धारणा के तहत था कि जावास्क्रिप्ट में एक स्ट्रिंग को डेट ऑब्जेक्ट को प्रारूपित करने के लिए अंतर्निहित एपीआई नहीं है।

संपादक का नोट: निम्नलिखित दृष्टिकोण प्रश्नकर्ता का प्रयास है जो किसी विशेष ब्राउज़र पर काम करता है लेकिन सामान्य रूप से काम नहीं करता है ; कुछ वास्तविक समाधान देखने के लिए इस पृष्ठ पर उत्तर देखें।

आज, मैंने toString()दिनांक ऑब्जेक्ट पर विधि के साथ खेला और आश्चर्यजनक रूप से यह तार को दिनांक स्वरूपित करने के उद्देश्य से कार्य करता है।

var d1 = new Date();
d1.toString('yyyy-MM-dd');       //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy')  //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome

यहाँ भी मुझे उन सभी तरीकों पर कोई दस्तावेज नहीं मिला, जिन्हें हम दिनांक ऑब्जेक्ट को एक स्ट्रिंग में स्वरूपित कर सकते हैं।

वह दस्तावेज कहां है जो Date()वस्तु द्वारा समर्थित प्रारूप निर्दिष्टकर्ताओं को सूचीबद्ध करता है ?


164
आपके उदाहरण वास्तव में आपके सोचने के तरीके पर काम नहीं करते हैं: jsfiddle.net/edelman/WDNVk/1
जेसन

27
क्षमा करें, .String में प्रारूप स्ट्रिंग को पास करना .NET में काम करता है, और यह जावा में काम कर सकता है, लेकिन जैसा कि जेसन ने बताया, यह वास्तव में जावास्क्रिप्ट में काम नहीं करता है।
जोशुआ कारमोडी

12
दोस्तों को याद है - सवाल, चाहे कितना भी विवादास्पद क्यों न हो, उन्हें सवाल बने रहने की जरूरत है । कृपया इस प्रश्न को एक उत्तर में बदलने वाले किसी भी संपादन से बचना चाहिए, इसके बजाय उत्तरों को परिष्कृत करें और बनाए रखें । धन्यवाद :)
टिम पोस्ट

1
मैंने इस लिंक में msdn.microsoft.com/en-us/library/ie/ff743760(v=vs.94).aspx - (date.toLocaleDateString ("en-US") कोड का उपयोग किया है ;
खालिद अन्नजर

अगर भविष्य में इस पृष्ठ पर आने वाले आगंतुक भ्रमित होते हैं कि अधिकांश उत्तर प्रश्न से कैसे संबंधित हैं, तो मैं सुझाव देता हूं कि प्रश्न संशोधन पढ़ें , विशेषकर (यदि ऊपर से भिन्न हो) संशोधन 15 @ एरिक मुइसर - मैं अमान्य के अभाव में भ्रमित था दिनांक # उपयोग स्ट्रिंग।
user66001

जवाबों:


1062

मैं प्यार करता हूँ जावास्क्रिप्ट का उपयोग प्रारूप समय और तारीख को 10 तरीके और तारीखों के साथ काम कर रहे

मूल रूप से, आपके पास तीन तरीके हैं और आपको अपने लिए तार जोड़ना होगा:

getDate() // Returns the date
getMonth() // Returns the month
getFullYear() // Returns the year

उदाहरण:

var d = new Date();
var curr_date = d.getDate();
var curr_month = d.getMonth() + 1; //Months are zero based
var curr_year = d.getFullYear();
console.log(curr_date + "-" + curr_month + "-" + curr_year);


27
इन दोनों साइटों पर प्रतिबंधात्मक लाइसेंस हैं। इसलिए यदि आप कोड (अनुमति के बिना) का उपयोग करते हैं, तो आप उल्लंघन में होंगे। Momentjs ( stackoverflow.com/a/10119138/278976 ) एक बेहतर विकल्प की तरह दिखता है और एमआईटी लाइसेंस है।
होमर 6

4
@peller इस प्रश्न का उत्तर देता है "मैं जावास्क्रिप्ट में दिनांक कैसे प्रारूपित करूं?" जो प्रभावी रूप से प्रश्न का शीर्षक है। सवाल के शरीर में वह काफी गुमराह है। और, आपकी बात के लिए, यह उत्तर यादृच्छिक गैर-मानक या उल्लिखित पुस्तकालयों का उपयोग करके स्ट्रिंग स्वरूपण के बारे में बात नहीं करता है। लेकिन प्रश्न का वह हिस्सा गलत तरीके से पूछा गया था, क्योंकि प्रश्न पर # 1 टिप्पणी इंगित करती है। तो, यह असली सवाल का जवाब देता है, लेकिन प्रारूप के तार नहीं हैं जो वास्तव में मौजूद नहीं हैं।
मकाए

3
@McKay; यह सवाल नहीं था। मुझे लगता है कि आप या तो गलत समझ रहे हैं कि पेलर क्या पूछ रहा है या आपके तर्क में बाधा बन रहा है।
कोडिन्थेहोल

10
@codeinthehole "जावास्क्रिप्ट में तिथियाँ" प्रश्न है। "अब तक मैं इस धारणा के तहत था कि जावास्क्रिप्ट में एक स्ट्रिंग को डेट ऑब्जेक्ट को प्रारूपित करने के लिए अंतर्निहित एपीआई नहीं है।" लेकिन फिर व्यवहार के बारे में बात करता है, मेरा मानना ​​है कि वह सोचता है कि जावास्क्रिप्ट में मूल है। बिना यह जाने कि वह किस पुस्तकालय का गलत संदर्भ देता है, मुझे लगता है कि सबसे अच्छा अनुमान यह है कि वह सवाल पूछ रहा है, "मैं जावास्क्रिप्ट में तारीखों को कैसे प्रारूपित करूं?" और मुझे नहीं लगता कि मैं जंगली छलांग लगा रहा हूं।
मैकके

5
MM का मतलब 01-12, 1-12 नहीं: 2013-04-17 => ठीक 2013-4-17 => BAD
एड्रियन मैयर

678

Moment.js

यह पार्सिंग, हेरफेर, और प्रारूपण की तारीखों के लिए एक (हल्के) * जावास्क्रिप्ट तिथि पुस्तकालय है।

var a = moment([2010, 1, 14, 15, 25, 50, 125]);
a.format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
a.format("ddd, hA");                       // "Sun, 3PM"

(*) हल्का अर्थ 9.3KB न्यूनतम + सबसे छोटा संभव सेटअप में gzipped (feb 2014)


7
यह बंदर को कोर ऑब्जेक्ट को छिद्रित करने के बजाय डेट ऑब्जेक्ट के आसपास एक डेकोरेटर पैटर्न प्रदान करता है, इसलिए आपको सड़क पर संघर्ष होने की संभावना कम है।
गाबे मार्टिन-डेमपसी

120
कृपया "हल्के" शब्द का दुरुपयोग करना बंद करें। यहां तक ​​कि 5kb ऐसी कार्यक्षमता के लिए हास्यास्पद रूप से बड़ी है, और आज के अनुसार यह आकार बढ़कर 19kb हो गया है।
user123444555621

26
@ Pumbaa80 मैं असहमत हूं कि "यहां तक ​​कि 5kb ऐसी कार्यक्षमता के लिए हास्यास्पद रूप से बड़ी है"। क्या आपने डॉक्स देखे हैं? यह जेएस में तारीखों से निपटने के लिए एक अत्यंत उपयोगी पुस्तकालय है। मैं समझता हूं कि "D / M / Y" जैसे मूल प्रारूप के एकल उपयोग के लिए केबी के एक जोड़े से अधिक एक पुस्तकालय होना थोड़ा अधिक हो सकता है, लेकिन कुछ KB के अंतर तब के लिए नगण्य हो रहे हैं, फिर पुस्तकालय का उपयोग करने में आसानी प्रदान करता है । कुछ केबी के लिए बनाए रखने योग्य कोड एक अच्छी बात है। यदि यह + 100KB की न्यूनतम होती, तो मैं सहमत होता।
टर्नरज

15
@ टुमरज ने तर्क दिया कि यह उपयोगी होने के नाते हल्के होने की चिंता का समाधान नहीं है। दोनों संबंधित नहीं हैं।
जोशजोर्डन

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

425

यदि आप पहले से ही अपने प्रोजेक्ट में jQuery UI का उपयोग कर रहे हैं , तो आप अपनी दिनांक ऑब्जेक्ट को स्वरूपित करने के लिए अंतर्निहित डेटपिकर विधि का उपयोग कर सकते हैं:

$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));

हालाँकि, डेटपिकर केवल तिथियों को प्रारूपित करता है, और समय को प्रारूपित नहीं कर सकता है।

JQuery यूआई डेटपिकर फॉर्मेट पर एक नज़र डालें , उदाहरण।


इसे स्थानीय समय या ज़ुलु का उपयोग करने के लिए कैसे कहें?
उस्मान संगट

7
मैं बिना किसी पुस्तकालय के समय प्राप्त करने में सक्षम इस समाधान का उपयोग करना पसंद करता हूं: नई तिथि ()। toTimeString ()। मैच (/ ^ ([0-9] {2}: [0-9] {2}: [0-9 ] {२}) /) [०] FYI करें

क्या इसे करने का कोई तरीका है। $ .datepicker.formatDate ('yy-mm-dd', नई तिथि ("txtAdvDate" .Val ()), या कुछ इस तरह की बात
पोम्स्टर

@ पॉम्स्टर - आपको क्या लगता है कि स्ट्रिंग "txtAdvDate" इस पर एक वैल विधि होगी? क्या आपका मतलब $ ('# txtAdvDate') है। वैल ()? यह मानते हुए कि यह कंस्ट्रक्टरों में से एक पर फिट बैठता है (यहाँ देखें w3schools.com/jsref/jsref_obj_date.asp ) तो यह ठीक काम करेगा।
vbullinger

@ पॉम्स्टर - इसका उपयोग करने का प्रयास करें: document.getElementById (id) .value = $ .datepicker.formatDate ('yy-mm-dd', नई तिथि ());
mrrsb

219

वह दस्तावेज कहां है जो Date()वस्तु द्वारा समर्थित प्रारूप निर्दिष्टकर्ताओं को सूचीबद्ध करता है ?

मैं आज इस बात पर अड़ गया और मुझे बहुत आश्चर्य हुआ कि इस सरल प्रश्न का उत्तर देने में किसी को भी समय नहीं लगा। सच है, तारीख में हेरफेर के साथ मदद करने के लिए कई पुस्तकालय हैं। दूसरों की तुलना में कुछ बेहतर हैं। लेकिन यह सवाल नहीं पूछा गया था।

AFAIK, शुद्ध जावास्क्रिप्ट प्रारूप का समर्थन नहीं करता है जिस तरह से आपने संकेत दिया है कि आप उनका उपयोग करना चाहते हैं । लेकिन यह दिनांक और / या बार, जैसे , और .toLocaleDateString(), स्वरूपण के लिए समर्थन विधियाँ करता है.toLocaleTimeString().toUTCString()

Dateऑब्जेक्ट संदर्भ मैं सबसे अधिक बार उपयोग करने पर है w3schools.com वेबसाइट (लेकिन एक त्वरित गूगल खोज जिनके बारे में शायद बेहतर अपनी जरूरतों को पूरा कर सकते हैं का पता चलता है)।

यह भी ध्यान दें कि दिनांक ऑब्जेक्ट गुण अनुभाग एक लिंक प्रदान करता है prototype, जो कुछ तरीके दिखाता है जिससे आप कस्टम विधियों के साथ दिनांक ऑब्जेक्ट का विस्तार कर सकते हैं। जावास्क्रिप्ट समुदाय में कुछ वर्षों से कुछ बहस हो रही है कि क्या यह सबसे अच्छा अभ्यास है या नहीं, और मैं इसके अस्तित्व की ओर इशारा कर रहा हूं या इसके खिलाफ वकालत नहीं कर रहा हूं।


26
MDN भी एक महान संदर्भ है: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Cypher

2
मेरे उत्तर ने इस प्रश्न को भी हल करने का प्रयास किया। मेरा मानना ​​है कि फ़ायरफ़ॉक्स या मोज़िला ब्राउज़र ने एक बार एक Date.toString () विधि प्रदान की थी जो इस तरह के प्रारूपण स्ट्रिंग को ले गई थी। दुर्भाग्य से, मैं पुराने प्रलेखन का कोई निशान नहीं पा सकता हूँ। यह अब मानक का हिस्सा नहीं है और फ़ायरफ़ॉक्स में भी कहीं भी समर्थित नहीं लगता है।
पेलर

214

कस्टम स्वरूपण समारोह:

निश्चित प्रारूपों के लिए, एक सरल कार्य कार्य करता है। उदाहरण के बाद अंतर्राष्ट्रीय प्रारूप YYYY-MM-DD उत्पन्न करें:

function dateToYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}

नोट: यह, हालांकि, आमतौर पर जावास्क्रिप्ट मानक पुस्तकालयों (जैसे इस फ़ंक्शन को तारीख के प्रोटोटाइप में जोड़कर) का विस्तार करने के लिए एक अच्छा विचार नहीं है।

एक अधिक उन्नत फ़ंक्शन एक प्रारूप पैरामीटर के आधार पर कॉन्फ़िगर करने योग्य आउटपुट उत्पन्न कर सकता है। इस एक ही पृष्ठ में कुछ अच्छे उदाहरण हैं।

यदि एक प्रारूपण फ़ंक्शन लिखना बहुत लंबा है, तो बहुत सारे पुस्तकालय हैं जिनके चारों ओर यह होता है। कुछ अन्य उत्तर पहले से ही उन्हें बता देते हैं। लेकिन बढ़ती निर्भरता के कारण इसका प्रति-भाग भी होता है।

मानक ECMAScript प्रारूपण कार्य:

ECMAscript के अधिक हाल के संस्करणों के बाद से, Dateकक्षा में कुछ विशिष्ट प्रारूपण कार्य हैं:

.DateString : कार्यान्वयन पर निर्भर, केवल दिनांक दिखाएं।

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toISOString : आईएसओ 8601 दिनांक और समय दिखाएं।

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

.जॉन : स्ट्रिंग के लिए JSON।

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson

new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"

toLocaleDateString : कार्यान्वयन निर्भर, स्थानीय प्रारूप में एक तारीख।

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

toLocaleString : कार्यान्वयन निर्भर, स्थानीय प्रारूप में एक तारीख और समय।

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

toLocaleTimeString : कार्यान्वयन निर्भर, स्थानीय प्रारूप में एक समय।

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

: सामान्य तिथि के लिए स्ट्रिंग।

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring

new Date().toString(); // e.g. "Fri Nov 11 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

ध्यान दें: उन फ़ॉर्मेटिंग फ़ंक्शंस में से कस्टम आउटपुट जेनरेट करना संभव है:

new Date().toISOString().slice(0,10); // By @Image72, return YYYY-MM-DD

10
इसका उत्तर स्वीकार किया जाना चाहिए, क्योंकि यह आवश्यक प्रारूप देता है (01-01-2000, 1-1-2000 नहीं)
डेन्यूबियन नाविक

6
नई तिथि ()। toISOString ()। टुकड़ा (0,10) // "2015-04-27"
image72

2
11 सितंबर के साथ उदाहरण नहीं देने के लिए बहुत उपयोगी होगा ताकि यह स्पष्ट हो सके कि किस दिन और किस महीने का प्रतिनिधित्व किया गया है।
कार्ल एडलर

1
@abimelex किया। उम्मीद है कि अब यह स्पष्ट है।
एड्रियन Maire

1
स्रोत से लिंक जोड़ने के लिए धन्यवाद (: - डेवलपर भी देखें। pm.ozilla.org/en-US/docs/Web/JavaScript/Reference/… और developer.mozilla.org/en-US/docs/Web/JavScript/Reference /…
सैंड्रा

125

संक्षिप्त उत्तर

कोई "सार्वभौमिक" दस्तावेज नहीं है जो जावास्क्रिप्ट को पूरा करता है; प्रत्येक ब्राउज़र जिसमें जावास्क्रिप्ट है वास्तव में एक कार्यान्वयन है। हालाँकि, एक मानक है जिसे अधिकांश आधुनिक ब्राउज़र अनुसरण करते हैं, और वह है EMCAScript मानक; ECMAScript मानक के तार न्यूनतम रूप से आईएसओ 8601 परिभाषा के संशोधित कार्यान्वयन में लगेंगे।

इसके अतिरिक्त, IETF द्वारा आगे एक दूसरा मानक सेट है जो कि ब्राउज़र भी अनुसरण करते हैं, जो कि RFC 2822 में किए गए टाइमस्टैम्प की परिभाषा है। वास्तविक प्रलेखन नीचे दी गई संदर्भ सूची में पाया जा सकता है।

इससे आप बुनियादी कार्यक्षमता की उम्मीद कर सकते हैं, लेकिन जो "होना चाहिए" वह स्वाभाविक रूप से "क्या" नहीं है। मैं इस प्रक्रिया के साथ थोड़ी गहराई में जा रहा हूं, हालांकि, ऐसा प्रतीत होता है कि वास्तव में केवल तीन लोगों ने सवाल का जवाब दिया (स्कॉट, गूफबॉल लॉजिक, और पेलर), जो कि, मेरे लिए, ज्यादातर लोगों का सुझाव है कि वास्तव में क्या होता है इससे अनजान हैं दिनांक ऑब्जेक्ट बनाएँ।


दीर्घ उत्तर

वह दस्तावेज़ कहाँ है जो दिनांक () ऑब्जेक्ट द्वारा समर्थित प्रारूप निर्दिष्टकर्ताओं को सूचीबद्ध करता है?


प्रश्न का उत्तर देने के लिए, या आम तौर पर इस प्रश्न का उत्तर खोजने के लिए, आपको यह जानना होगा कि जावास्क्रिप्ट एक उपन्यास भाषा नहीं है; यह वास्तव में ECMAScript का कार्यान्वयन है, और ECMAScript मानकों का अनुसरण करता है (लेकिन ध्यान दें, जावास्क्रिप्ट भी वास्तव में उन मानकों को पूर्व दिनांकित करता है; EMCAScript मानकों को LiveScript / JavaScript के प्रारंभिक कार्यान्वयन से बनाया गया है)। वर्तमान ECMAScript मानक 5.1 (2011) है; उस समय जब प्रश्न मूल रूप से पूछा गया था (जून '09), मानक 3 था (4 को छोड़ दिया गया था), लेकिन 5 2009 के अंत में पोस्ट के तुरंत बाद जारी किया गया था। यह एक समस्या को रेखांकित करना चाहिए; एक जावास्क्रिप्ट कार्यान्वयन किस मानक का पालन कर सकता है, यह प्रतिबिंबित नहीं कर सकता है कि वास्तव में क्या है क्योंकि, क) यह किसी दिए गए मानक का कार्यान्वयन है, बी) मानक के सभी कार्यान्वयन प्यूरिटन नहीं हैं,

अनिवार्य रूप से, जब जावास्क्रिप्ट के साथ काम कर रहे हैं, तो आप एक कार्यान्वयन (जावास्क्रिप्ट खुद के लिए ब्राउज़र के लिए विशिष्ट) (जावास्क्रिप्ट के साथ काम कर रहे हैं)। उदाहरण के लिए, Google का V8, ECMAScript 5.0 को लागू करता है, लेकिन Internet Explorer का JScript किसी भी ECMAScript मानक के अनुरूप होने का प्रयास नहीं करता है, फिर भी Internet Explorer 9 ECMAScript 5.0 के अनुरूप है।

जब किसी एकल तर्क को नई तिथि () में पारित किया जाता है, तो वह इस फ़ंक्शन को प्रोटोटाइप बनाता है:

new Date(value)

जब दो या अधिक तर्क नई तिथि () को दिए जाते हैं, तो यह इस फ़ंक्शन को प्रोटोटाइप बनाता है:

new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )


उन दोनों कार्यों को परिचित होना चाहिए, लेकिन यह तुरंत आपके सवाल का जवाब नहीं देता है और एक स्वीकार्य "तिथि प्रारूप" के रूप में क्या मात्रा निर्धारित करता है, इसके लिए और स्पष्टीकरण की आवश्यकता है। जब आप नई तिथि () को एक स्ट्रिंग पास करते हैं, तो यह प्रोटोटाइप को कॉल करेगा (ध्यान दें कि मैं प्रोटोटाइप शब्द का उपयोग शिथिल रूप से कर रहा हूं ; संस्करण व्यक्तिगत कार्य हो सकते हैं, या यह किसी एकल फ़ंक्शन में सशर्त विवरण का हिस्सा हो सकता है) "मूल्य" पैरामीटर के तर्क के रूप में आपकी स्ट्रिंग के साथ नई तिथि (मान) । यह फ़ंक्शन पहले जांच करेगा कि यह एक संख्या है या एक स्ट्रिंग है। इस समारोह के लिए दस्तावेज यहां देखे जा सकते हैं:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

इससे, हम यह घटा सकते हैं कि नई तिथि (मान) के लिए अनुमत स्ट्रिंग प्रारूपण प्राप्त करने के लिए, हमें Date.parse (स्ट्रिंग) विधि को देखना होगा। इस विधि के लिए प्रलेखन यहाँ पाया जा सकता है:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

और हम आगे यह अनुमान लगा सकते हैं कि तारीखें संशोधित आईएसओ 8601 विस्तारित प्रारूप में होने की उम्मीद है, जैसा कि यहां बताया गया है:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

हालाँकि, हम अनुभव से यह पहचान सकते हैं कि जावास्क्रिप्ट की दिनांक ऑब्जेक्ट अन्य स्वरूपों को स्वीकार करती है (पहली जगह में इस प्रश्न के अस्तित्व द्वारा लागू), और यह ठीक है क्योंकि ECMAScript विशिष्ट प्रारूपों को लागू करने की अनुमति देता है। हालाँकि, यह अभी भी इस सवाल का जवाब नहीं देता है कि उपलब्ध प्रारूपों पर क्या प्रलेखन उपलब्ध है, और न ही वास्तव में किन प्रारूपों की अनुमति है। हम Google के जावास्क्रिप्ट कार्यान्वयन, V8 को देखने जा रहे हैं; कृपया ध्यान दें कि मैं यह सुझाव नहीं दे रहा हूं कि यह "सर्वश्रेष्ठ" जावास्क्रिप्ट इंजन है (कोई व्यक्ति "सर्वश्रेष्ठ" या "अच्छा" कैसे परिभाषित कर सकता है) और कोई यह नहीं मान सकता है कि V8 में दिए गए प्रारूप आज उपलब्ध सभी स्वरूपों का प्रतिनिधित्व करते हैं, लेकिन मुझे लगता है कि यह उचित है यह मानने के लिए कि वे आधुनिक अपेक्षाओं का पालन करते हैं।

Google का V8, date.js, DateConstructor

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

DateConstructor फ़ंक्शन को देखते हुए, हम DateParse फ़ंक्शन को खोजने के लिए आवश्यक घटा सकते हैं; हालाँकि, ध्यान दें कि "वर्ष" वास्तविक वर्ष नहीं है और केवल "वर्ष" पैरामीटर का संदर्भ है।

Google का V8, date.js, DateParse

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

यह% DateParseString को कॉल करता है, जो वास्तव में C ++ फ़ंक्शन के लिए एक रन-टाइम फ़ंक्शन संदर्भ है। यह निम्नलिखित कोड को संदर्भित करता है:

Google का V8, runtime.cc,% DateParseString

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

इस फ़ंक्शन में हम जिस फ़ंक्शन कॉल से चिंतित हैं, वह DateParser :: Parse () के लिए है; उन फ़ंक्शन कॉल के आसपास के तर्क को अनदेखा करें, ये एन्कोडिंग प्रकार (ASCII और UC16) के अनुरूप हैं। DateParser :: पार्स यहाँ परिभाषित किया गया है:

Google का V8, dateparser -ll.h, DateParser :: Parse

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

यह वह फ़ंक्शन है जो वास्तव में परिभाषित करता है कि यह किस प्रारूप को स्वीकार करता है। अनिवार्य रूप से, यह EMCAScript 5.0 आईएसओ 8601 मानक के लिए जाँच करता है और यदि यह मानकों के अनुरूप नहीं है, तो यह विरासत स्वरूपों के आधार पर तारीख बनाने का प्रयास करेगा। टिप्पणियों के आधार पर कुछ मुख्य बिंदु:

  1. पहले नंबर से पहले जो शब्द पार्सर से अनजान हैं, उन्हें अनदेखा कर दिया जाता है।
  2. कोष्ठक पाठ को अनदेखा किया जाता है।
  3. “और” के बाद अनसाइन किए गए नंबरों की व्याख्या “समय घटक” के रूप में की जाती है।
  4. इसके बाद अनसाइन किए गए नंबर "।" एक "समय घटक" के रूप में व्याख्या की जाती है, और इसे मिलीसेकंड के बाद किया जाना चाहिए।
  5. घंटे या घंटे मिनट (जैसे +5: 15 या +0515) के बाद हस्ताक्षरित संख्याओं को समयक्षेत्र के रूप में व्याख्या की जाती है।
  6. घंटे और मिनट की घोषणा करते समय, आप "hh: mm" या "hhmm" का उपयोग कर सकते हैं।
  7. शब्द जो समय क्षेत्र को इंगित करते हैं, उन्हें समय क्षेत्र के रूप में व्याख्या की जाती है।
  8. अन्य सभी संख्याओं की व्याख्या "तिथि घटक" के रूप में की जाती है।
  9. एक महीने के पहले तीन अंकों के साथ शुरू होने वाले सभी शब्दों को महीने के रूप में व्याख्या की जाती है।
  10. आप मिनटों और घंटों को दोनों स्वरूपों में एक साथ परिभाषित कर सकते हैं: "hh: mm" या "hhmm"।
  11. एक नंबर संसाधित होने के बाद "+", "-" और बेजोड़ "" जैसे प्रतीकों की अनुमति नहीं है।
  12. कई प्रारूपों (जैसे 1970-01-01) से मेल खाने वाली वस्तुओं को मानक अनुरूप EMCAScript 5.0 ISO 8601 स्ट्रिंग के रूप में संसाधित किया जाता है।

तो यह आपको एक मूल विचार देने के लिए पर्याप्त होना चाहिए कि जब किसी दिनांक ऑब्जेक्ट में स्ट्रिंग पास करने की बात आती है, तो क्या उम्मीद करें। आप निम्नलिखित विनिर्देश को देखकर इस पर विस्तार कर सकते हैं कि मोज़िला मोज़िला डेवलपर नेटवर्क पर इंगित करता है (IETF RFC 2822 टाइमस्टैम्प के अनुरूप):

http://tools.ietf.org/html/rfc2822#page-14

Microsoft डेवलपर नेटवर्क अतिरिक्त रूप से दिनांक ऑब्जेक्ट के लिए एक अतिरिक्त मानक का उल्लेख करता है: ECMA-402, ECMAScript अंतर्राष्ट्रीयकरण एपीआई विशिष्टता, जो ECMAScript 5.1 मानक (और भविष्य के) का पूरक है। यहाँ पाया जा सकता है:

http://www.ecma-international.org/ecma-402/1.0/

किसी भी मामले में, यह उजागर करने में सहायता करनी चाहिए कि कोई भी "प्रलेखन" नहीं है जो सार्वभौमिक रूप से जावास्क्रिप्ट के सभी कार्यान्वयन का प्रतिनिधित्व करता है, लेकिन अभी भी पर्याप्त प्रलेखन उपलब्ध है जो यह दर्शाता है कि तार एक तिथि वस्तु के लिए क्या स्वीकार्य हैं। जब आप इसके बारे में सोचते हैं, तो लोड किए गए प्रश्न को पूरा करें? : पी

संदर्भ

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

http://tools.ietf.org/html/rfc2822#page-14

http://www.ecma-international.org/ecma-402/1.0/

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

साधन

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

http://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx


92

जावास्क्रिप्ट में तारीखों से निपटने के लिए सुनिश्चित करें कि आप Datejs की जांच करें । यह काफी प्रभावशाली और अच्छी तरह से प्रलेखित है जैसा कि आप स्टर्लिंग फ़ंक्शन के मामले में देख सकते हैं ।

संपादित करें : टायलर फोर्सिथे बताते हैं, यह तारीख पुरानी है। मैं अपने वर्तमान प्रोजेक्ट में इसका उपयोग करता हूं और इसे लेकर कोई परेशानी नहीं थी, हालांकि आपको इसके बारे में पता होना चाहिए और विकल्पों पर विचार करना चाहिए।


2
मैं एक तिथि बनाने के लिए मिलीसेकंड के साथ खजूर खिलाने का तरीका नहीं खोज सका। जैसे: var dateTime = new Date (); dateTime.setTime (मिलीसेकेंड);
बजे आर्ने एवरट्सन

14
25k? सिर्फ तारीखों के लिए? आउच।
बेन लेश

13
Datejs एक पुरानी लाइब्रेरी है, जिसने ~ 5 वर्षों में सक्रिय विकास नहीं देखा है। उनका स्रोत गितुब और Google कोड पर है और दोनों ने 2008 (यह 2013) की अंतिम अद्यतन तारीखें हैं। अपने विवेक के लिए, XDate या Moment.js के साथ जाएं।
टायलर फोर्सिथे जुले

3
@TylerForsythe मैंने उस बारे में एक संकेत / चेतावनी जोड़ी।
टिम बुथ

2
lol डेट स्क्रिप्ट पुराना है ...
rtpHarry

69

आप बस Dateएक नई formatविधि के साथ ऑब्जेक्ट का विस्तार कर सकते हैं जैसा कि meizz द्वारा नोट किया गया है , नीचे लेखक द्वारा दिया गया कोड है। और यहाँ एक jsfiddle है

Date.prototype.format = function(format) //author: meizz
{
  var o = {
    "M+" : this.getMonth()+1, //month
    "d+" : this.getDate(),    //day
    "h+" : this.getHours(),   //hour
    "m+" : this.getMinutes(), //minute
    "s+" : this.getSeconds(), //second
    "q+" : Math.floor((this.getMonth()+3)/3),  //quarter
    "S" : this.getMilliseconds() //millisecond
  }

  if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
    (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  for(var k in o)if(new RegExp("("+ k +")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length==1 ? o[k] :
        ("00"+ o[k]).substr((""+ o[k]).length));
  return format;
}

alert(new Date().format("yyyy-MM-dd"));
alert(new Date("january 12 2008 11:12:30").format("yyyy-MM-dd h:mm:ss"));

एएम / पीएम का समर्थन करने के लिए मेरे उद्देश्यों के लिए इसे थोड़ा बढ़ाया - नीचे देखें
माइकल एंगस्टेड

@HK लेकिन मुझे अभी भी क्षणिकाएँ अधिक पसंद हैं : D
gongzhitaao

समस्या है जब कब्जा महीना: नई तारीख (नई तारीख ())। प्रारूप ('yyyy-MM-dd')) मई वापस हो सकता है लेकिन अब जून है: - / paroto string में टाइमजोन का उपयोग करें?
ई-इंफो e२

1
@WHK यह वास्तव में एक बहुत ही आदिम तिथि पार्सर है। बस अगर आपको तारीख से ज्यादा गड़बड़ नहीं करनी है। यदि आपको वास्तव में तारीखों के विभिन्न स्वरूपों से निपटने की आवश्यकता है, तो मैं एक स्टैंडअलोन लाइब्रेरी की सिफारिश करूंगा जैसे कि क्षण। : D
gongzhitaao

1
@HK के लिए console.log(new Date('2014-06-01')) -> Mayमुझे लगता है कि यह कुछ समय के साथ करना है: D
gongzhitaao

37

आपके द्वारा बताई गई कार्यक्षमता मानक जावास्क्रिप्ट नहीं है, ब्राउज़र में पोर्टेबल होने की संभावना नहीं है और इसलिए अच्छा अभ्यास नहीं है। ECMAScript 3 कल्पना पत्ते पार्स और उत्पादन प्रारूपों Javascript क्रियान्वयन करने के लिए कार्य करते हैं। ECMAScript 5 में ISO8601 समर्थन का एक सबसेट शामिल है। मेरा मानना ​​है कि आपके द्वारा उल्लिखित () फ़ंक्शन एक ब्राउजर (मोज़िला) में एक नवीनता है?

कई पुस्तकालयों को इसे संचालित करने के लिए दिनचर्या प्रदान करते हैं, कुछ व्यापक स्थानीयकरण समर्थन के साथ। आप dojo.date.locale में विधियों की जांच भी कर सकते हैं ।


5
वास्तव में सवाल का जवाब देने का प्रयास करने से आपको कई वोट नहीं मिलेंगे। बस एक लोकप्रिय पुस्तकालय को नामांकित करें और अपने स्कोर को देखें !!
रॉबग ऑग

30

मैंने इसे बहुत ही सरल रूप दिया, यह कट / n / पेस्टेबल है (neater संस्करण के साथ अद्यतन):

function DateFmt(fstr) {
  this.formatString = fstr

  var mthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  var dayNames = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var zeroPad = function(number) {
     return ("0"+number).substr(-2,2);
  }

  var dateMarkers = {
    d:['getDate',function(v) { return zeroPad(v)}],
    m:['getMonth',function(v) { return zeroPad(v+1)}],
    n:['getMonth',function(v) { return mthNames[v]; }],
    w:['getDay',function(v) { return dayNames[v]; }],
    y:['getFullYear'],
    H:['getHours',function(v) { return zeroPad(v)}],
    M:['getMinutes',function(v) { return zeroPad(v)}],
    S:['getSeconds',function(v) { return zeroPad(v)}],
    i:['toISOString']
  };

  this.format = function(date) {
    var dateTxt = this.formatString.replace(/%(.)/g, function(m, p) {
      var rv = date[(dateMarkers[p])[0]]()

      if ( dateMarkers[p][1] != null ) rv = dateMarkers[p][1](rv)

      return rv

    });

    return dateTxt
  }

}

fmt = new DateFmt("%w %d:%n:%y - %H:%M:%S  %i")
v = fmt.format(new Date())

http://snipplr.com/view/66968.82825/


4
मुझे यह वर्ग पसंद है लेकिन लगता है कि इसे "स्थिर" वर्ग होना चाहिए। इसे एक से अधिक बार इंस्टेंट करने की आवश्यकता नहीं है। (की आवश्यकता नहीं होनी चाहिए new DateFmt())
चेसो १६'१३ को ०:०६

1
चीज़ो: क्या होगा अगर मैं पेज 3 पर 10 अलग-अलग तारीखों को अलग-अलग तरीके से प्रारूपित करना चाहता हूं, तो प्रत्येक? उस स्थिति में इस फॉर्मेटर के तीन उदाहरण होना उपयोगी होगा। यह पूरी तरह से वैध है कि यह पहले से ही लागू होगा। ओपी ने इसे सही ढंग से डिजाइन किया। साथ ही निर्माण के समय एक प्रारूप निर्दिष्ट करने से एक निश्चित तरीके से प्रारूपित किए जाने के लिए हर बार एक प्रारूप को निर्दिष्ट करने के कोड दोहराव से बचाता है।
hsanders

29

फ्रेमवर्क मुक्त, सीमित लेकिन हल्का

var d = (new Date()+'').split(' ');
// ["Tue", "Sep", "03", "2013", "21:54:52", "GMT-0500", "(Central", "Daylight", "Time)"]

[d[3], d[1], d[2], d[4]].join(' ');
// "2013 Sep 03 21:58:03"

क्या यह क्रॉस ब्राउज़र है? और क्रॉस लोकेल?
इफ्ताह

हाँ। आपके (ब्राउज़र उपयोगकर्ता) स्थानीय समय क्षेत्र में समय दिखाता है।
जॉन विलियम्स

22

DateJS निश्चित रूप से पूर्ण-विशेषताओं वाला है, लेकिन मैं इस MUCH सरल कार्य (जावास्क्रिप्ट तिथि प्रारूप) की सिफारिश करूंगा, जिसे मैं केवल इसलिए पसंद करता हूं क्योंकि यह केवल 120 लाइनें या ऐसा है।


लिंक किए गए लेख में स्रोत कोड संदर्भ मृत हैं, लेकिन सौभाग्य से किसी ने इसे गीथब पर रखा: github.com/rvanbaalen/date-steroids
Geert

18

अन्य उत्तरों में प्रदान किए गए विकल्पों में से कई के माध्यम से देखने के बाद, मैंने अपना खुद का सीमित लेकिन सरल समाधान लिखने का फैसला किया जो दूसरों को भी उपयोगी लगे।

/**
* Format date as a string
* @param date - a date object (usually "new Date();")
* @param format - a string format, eg. "DD-MM-YYYY"
*/
function dateFormat(date, format) {
    // Calculate date parts and replace instances in format string accordingly
    format = format.replace("DD", (date.getDate() < 10 ? '0' : '') + date.getDate()); // Pad with '0' if needed
    format = format.replace("MM", (date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1)); // Months are zero-based
    format = format.replace("YYYY", date.getFullYear());
    return format;
}

उदाहरण उपयोग:

console.log("The date is: " + dateFormat(new Date(), "DD/MM/YYYY"));

2
प्रतिस्थापित ऑपरेशन वास्तव में कुशल नहीं हैं, इसलिए इसे रोकने के लिए बेहतर अभ्यास है।
mrzmyr

अगर मैं लिखूं तो क्या होने वाला है? कंसोल.लॉग ("दिनांक है:" + dateFormat (नई तिथि (), "DD / MM / YY"));
हकान

1
यह "तारीख है: 12/11 / YY" पाठ को प्रिंट करेगा, क्योंकि ऊपर 2-अंकों की तारीखों को नहीं संभालता है। यदि आपको इसकी आवश्यकता है, तो आप रिटर्न स्टेटमेंट से ठीक पहले निम्नलिखित जोड़ सकते हैं format = format.replace("YY", (""+date.getFullYear()).substring(2));:। हालांकि यह बदसूरत हो रहा है - आप शायद RegEx मार्ग या इसके समान नीचे जाना चाहते हैं।
ओली बेनेट

1
@mrzmyr क्या आपको वास्तव में लगता है कि फॉर्मेटिंग डेट एक प्रदर्शन अड़चन होगी? आ जाओ।
doug65536 10

11

यहाँ एक फ़ंक्शन है जो मैं बहुत उपयोग करता हूं। परिणाम yyyy-mm-dd hh: mm: ss.nnn है।

function date_and_time() {
    var date = new Date();
    //zero-pad a single zero if needed
    var zp = function (val){
        return (val <= 9 ? '0' + val : '' + val);
    }

    //zero-pad up to two zeroes if needed
    var zp2 = function(val){
        return val <= 99? (val <=9? '00' + val : '0' + val) : ('' + val ) ;
    }

    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    var h = date.getHours();
    var min = date.getMinutes();
    var s = date.getSeconds();
    var ms = date.getMilliseconds();
    return '' + y + '-' + zp(m) + '-' + zp(d) + ' ' + zp(h) + ':' + zp(min) + ':' + zp(s) + '.' + zp2(ms);
}

1
अच्छा उत्तर, लेकिन मुझे लगता है कि आपको zp2 फ़ंक्शन को इस प्रकार बदलना चाहिए: var zp2 = function (val) {रिटर्न वैल <= 9? '00' + वैल: (वैल <= 99; '0' + वैल: '' + वैल); }
एरिक वांग

1
एक अपवाद है, जब एमएस भाग का मान 0 होता है, तो यह समान नहीं है, आपके कार्य में परिणाम '00' है, लेकिन '000' नहीं है।
एरिक वांग

9

आपको दिनांक ऑब्जेक्ट का यह संशोधन उपयोगी हो सकता है, जो किसी भी लाइब्रेरी से छोटा है और विभिन्न स्वरूपों का समर्थन करने के लिए आसानी से विस्तार योग्य है:

ध्यान दें:

  • यह Object.keys () का उपयोग करता है जो पुराने ब्राउज़रों में अपरिभाषित है, इसलिए आपको दिए गए लिंक से पॉलीफ़िल को लागू करने की आवश्यकता हो सकती है।

कोड

Date.prototype.format = function(format) {
    // set default format if function argument not provided
    format = format || 'YYYY-MM-DD hh:mm';

    var zeropad = function(number, length) {
            number = number.toString();
            length = length || 2;
            while(number.length < length)
                number = '0' + number;
            return number;
        },
        // here you can define your formats
        formats = {
            YYYY: this.getFullYear(),
            MM: zeropad(this.getMonth() + 1),
            DD: zeropad(this.getDate()),
            hh: zeropad(this.getHours()),
            mm: zeropad(this.getMinutes())
        },
        pattern = '(' + Object.keys(formats).join(')|(') + ')';

    return format.replace(new RegExp(pattern, 'g'), function(match) {
        return formats[match];
    });
};

उपयोग

var now = new Date;
console.log(now.format());
// outputs: 2015-02-09 11:47
var yesterday = new Date('2015-02-08');
console.log(yesterday.format('hh:mm YYYY/MM/DD'));
// outputs: 00:00 2015/02/08

8

बस gongzhitaao के ठोस जवाब जारी रखने के लिए - यह एएम / पीएम को संभालता है

 Date.prototype.format = function (format) //author: meizz
{
    var hours = this.getHours();
    var ttime = "AM";
    if(format.indexOf("t") > -1 && hours > 12)
    {
        hours = hours - 12;
        ttime = "PM";
     }

var o = {
    "M+": this.getMonth() + 1, //month
    "d+": this.getDate(),    //day
    "h+": hours,   //hour
    "m+": this.getMinutes(), //minute
    "s+": this.getSeconds(), //second
    "q+": Math.floor((this.getMonth() + 3) / 3),  //quarter
    "S": this.getMilliseconds(), //millisecond,
    "t+": ttime
}

if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
  (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) if (new RegExp("(" + k + ")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length == 1 ? o[k] :
        ("00" + o[k]).substr(("" + o[k]).length));
return format;
}

बहुत अच्छा समाधान! var a = नई तिथि (); a.format ( 'yyyy-MM-घ'); // वापसी 2013-08-16।
एड्रियन मैयर

this.getMonth (); iOS में विफल रहता है
N20084753

7

मुझे मान्य तिथि प्रारूपों पर कोई निश्चित दस्तावेज नहीं मिल पा रहा था, इसलिए मैंने विभिन्न ब्राउज़रों में जो समर्थित है उसे देखने के लिए अपना परीक्षण लिखा।

http://blarg.co.uk/blog/javascript-date-formats

मेरे परिणाम निष्कर्ष निकाला है कि मेरे द्वारा परीक्षण किए गए सभी ब्राउज़रों में मान्य प्रारूप (उदाहरण 9 अगस्त 2013 की तारीख का उपयोग करते हैं):

[पूर्ण वर्ष] / [महीना] / [दिनांक संख्या] - महीना या तो अग्रणी शून्य के साथ या बिना संख्या के हो सकता है या लघु या दीर्घ प्रारूप में महीने का नाम हो सकता है, और दिनांक संख्या अग्रणी शून्य के साथ या बिना हो सकती है।

  • 2013/08/09
  • 2013/08/09
  • 2013/08/09
  • 2013/08/09
  • 2013 / अगस्त / 09
  • 2013 / अगस्त / 9
  • 2013 / अगस्त / 09
  • 2013 / अगस्त / 9

[महीना] / [पूर्ण वर्ष] / [दिनांक संख्या] - महीना या तो अग्रणी शून्य के साथ या बिना संख्या के हो सकता है या छोटे या लंबे प्रारूप में महीने का नाम हो सकता है, और दिनांक संख्या एक अग्रणी शून्य के साथ या बिना हो सकती है।

  • 08/2013/09
  • 08/2013/9
  • 8/2013/09
  • 8/2013/9
  • अगस्त / 2013/09
  • अगस्त / 2013/9
  • अगस्त / 2013/09
  • अगस्त / 2013/9

[पूर्ण वर्ष], [माह का नाम] और [दिनांक संख्या] के किसी भी संयोजन को रिक्त स्थान से अलग किया जाता है - महीना का नाम छोटे या लंबे प्रारूप में हो सकता है, और दिनांक संख्या अग्रणी शून्य के साथ या उसके बिना हो सकती है।

  • 2013 अगस्त 09
  • अगस्त 2013 09
  • 09 अगस्त 2013
  • 2013 अगस्त 09
  • अगस्त २०१३
  • 2013 9 अगस्त
  • आदि...

"आधुनिक ब्राउज़र" में भी मान्य है (या दूसरे शब्दों में IE9 और उसके नीचे के सभी ब्राउज़र)

[पूर्ण वर्ष] - [महीना संख्या] - [दिनांक संख्या] - महीना और दिनांक संख्या में अग्रणी शून्य शामिल होना चाहिए (यह वह प्रारूप है जो MySQL दिनांक प्रकार का उपयोग करता है)

  • 2013-08-09

महीने के नामों का उपयोग करना:
दिलचस्प बात यह है कि महीने के नाम का उपयोग करते समय, मुझे पता चला कि महीने के नाम के केवल पहले 3 अक्षरों का उपयोग किया जाता है, इसलिए निम्नलिखित में से सभी पूरी तरह से मान्य हैं:

new Date('9 August 2013');
new Date('9 Aug 2013');
new Date('9 Augu 2013');
new Date('9 Augustagfsdgsd 2013');

6

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

XDate जावास्क्रिप्ट पुस्तकालय द्वारा एडम शॉ 2011 के मध्य के बाद से आसपास किया गया है और सक्रिय विकास के अंतर्गत अभी भी है। यह शानदार प्रलेखन है, एक महान एपीआई, स्वरूपण, पीछे-संगत रहने की कोशिश करता है और यहां तक ​​कि स्थानीयकृत तार का भी समर्थन करता है।

लोकल स्ट्रिंग्स को बदलने के लिए लिंक: https://gist.github.com/1221376


6

उदाहरण कोड:

var d = new Date();
var time = d.toISOString().replace(/.*?T(\d+:\d+:\d+).*/, "$1");

आउटपुट:

"13:45:20"


2
के साथ ध्यान देने योग्य toISOString (); यह यूटीसी को आउटपुट करता है। तो अगर new Date();// = Fri Nov 22 2013 17:48:22 GMT+0100, उपरोक्त कोड के साथ आउटपुट होगा"16:48:22"
Tewr

6

जावास्क्रिप्ट में तारीखों के साथ काम करने के लिए लाइब्रेरी शुगर.जेएस की कुछ बड़ी कार्यक्षमता है। और यह बहुत अच्छी तरह से प्रलेखित है

चीनी Date.create विधि से शुरू होने वाले डेट क्लास को बहुत प्यार देता है जो 15 प्रमुख भाषाओं में किसी भी प्रारूप के बारे में तारीखों को समझ सकता है, जिसमें "1 घंटे पहले" जैसे सापेक्ष प्रारूप शामिल हैं। तिथियों को किसी भी प्रारूप या भाषा में आउटपुट भी किया जा सकता है, जो वाक्यविन्यास को समझने में आसान है, आमतौर पर उपयोग किए जाने वाले दिनांक प्रारूपों के शॉर्टकट के साथ। जैसी विधियों के साथ जटिल तिथि की तुलना भी संभव है, जो किसी भी प्रारूप को समझती है और सटीक रूप से निर्मित होती है।

कुछ उदाहरण:

Date.create('July 4, 1776')  -> July 4, 1776
Date.create(-446806800000)   -> November 5, 1955
Date.create(1776, 6, 4)      -> July 4, 1776
Date.create('1776年07月04日', 'ja') -> July 4, 1776
Date.utc.create('July 4, 1776', 'en')  -> July 4, 1776

Date.create().format('{Weekday} {d} {Month}, {yyyy}')    -> Monday July 4, 2003
Date.create().format('{hh}:{mm}')                        -> 15:57
Date.create().format('{12hr}:{mm}{tt}')                  -> 3:57pm
Date.create().format(Date.ISO8601_DATETIME)              -> 2011-07-05 12:24:55.528Z

Date.create().is('the 7th of June') -> false
Date.create().addMonths(2); ->"Sunday, June 15, 2014 13:39"

4

सभी ब्राउज़र

आपके द्वारा उपयोग किए जा रहे स्रोत प्रारूप के साथ किसी तिथि को प्रारूपित करने का सबसे विश्वसनीय तरीका निम्नलिखित चरणों को लागू करना है:

  1. ऑब्जेक्ट new Date()बनाने के लिए उपयोग करेंDate
  2. उपयोग .getDate(), .getMonth()और .getFullYear()क्रमशः दिन, महीने और वर्ष प्राप्त करने के लिए
  3. अपने लक्ष्य प्रारूप के अनुसार टुकड़ों को एक साथ चिपकाएं

उदाहरण :

var date = '2015-11-09T10:46:15.097Z';

function format(input) {
    var date = new Date(input);
    return [
       ("0" + date.getDate()).slice(-2),
       ("0" + (date.getMonth()+1)).slice(-2),
       date.getFullYear()
    ].join('/');
}

document.body.innerHTML = format(date); // OUTPUT : 09/11/2015

( यह फिडल भी देखें )।


केवल आधुनिक ब्राउज़र

आप .toLocaleDateStringअपने लिए स्वरूपण करने के लिए अंतर्निहित पद्धति का उपयोग भी कर सकते हैं। आपको सही प्रारूप से मेल खाने के लिए उचित लोकेल और विकल्पों के साथ पास करने की आवश्यकता है, जो दुर्भाग्य से केवल आधुनिक ब्राउज़रों द्वारा समर्थित है (*) :

var date = '2015-11-09T10:46:15.097Z';

function format(input) {
    return new Date(input).toLocaleDateString('en-GB', {
        year: 'numeric',
        month: '2-digit',
        day: '2-digit'
    });
}

document.body.innerHTML = format(date); // OUTPUT : 09/11/2015

( यह फिडल भी देखें )।


(*) MDN के अनुसार , "आधुनिक ब्राउज़र" का अर्थ है क्रोम 24+, फ़ायरफ़ॉक्स 29+, IE11, Edge12 +, ओपेरा 15+ और सफारी नाइट बिल्ड।


3

बस एक और विकल्प, जो मैंने लिखा:

DP_DateExtensions लाइब्रेरी

निश्चित नहीं है कि यह मदद करेगा, लेकिन मैंने इसे कई परियोजनाओं में उपयोगी पाया है - ऐसा लगता है कि यह वही करेगा जो आपको चाहिए।

दिनांक / समय स्वरूपण, दिनांक गणित (तिथि / जोड़ जोड़ घटाना), दिनांक तुलना, दिनांक पार्सिंग आदि का समर्थन करता है। यह उदारतापूर्वक खुला स्रोत है।

इस पर विचार करने का कोई कारण नहीं है यदि आप पहले से ही एक फ्रेमवर्क का उपयोग कर रहे हैं (वे सभी सक्षम हैं), लेकिन अगर आपको बस एक परियोजना में जल्दी से तारीख हेरफेर जोड़ने की आवश्यकता है तो इसे मौका दें।


1
मुझे लगता है कि नया URL depressedpress.com/javascript-extensions/dp_dateextensions
torvin

2

यदि आप केवल दो अंकों के साथ समय दिखाना चाहते हैं , तो इससे आपको मदद मिल सकती है:

var now = new Date();
var cHour = now.getHours();
var cMinuts = now.getMinutes();
var cSeconds = now.getSeconds();

var outStr = (cHour <= 0 ? ('0' + cHour) : cHour) + ':' + (cMinuts <= 9 ? ('0' + cMinuts) : cMinuts) + ':' + (cSeconds <= 9 ? '0' + cSeconds : cSeconds);


1

JsSimpleDateFormat एक पुस्तकालय है जो दिनांक ऑब्जेक्ट को स्वरूपित कर सकता है और स्वरूपित स्ट्रिंग को वापस दिनांक ऑब्जेक्ट पर पार्स कर सकता है। यह Java फॉर्मेट (SimpleDateFormat क्लास) का उपयोग करता है। महीनों और दिनों के नाम को स्थानीय किया जा सकता है।

उदाहरण:

var sdf = new JsSimpleDateFormat("EEEE, MMMM dd, yyyy");
var formattedString = sdf.format(new Date());
var dateObject = sdf.parse("Monday, June 29, 2009");

1

उत्तर "कहीं नहीं" है क्योंकि दिनांक स्वरूपण मालिकाना कार्यक्षमता है। मुझे नहीं लगता कि स्ट्रैसिंग फ़ंक्शंस किसी विशिष्ट प्रारूप के अनुरूप हैं। ECMAScript 5.1 कल्पना में जैसे ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , 2013/2/8, पेज 173), toString समारोह के रूप में इस दस्तावेज है :

"स्ट्रिंग की सामग्री कार्यान्वयन-निर्भर हैं"

नीचे दिए गए नमूनों जैसे फ़ंक्शंस का उपयोग फ़ॉर्मेटिंग को आसानी से पूरा करने के लिए किया जा सकता है।

function pad(toPad, padWith) {
    return (String(padWith) + String(toPad)).slice(-1 * padWith.length);
}

function dateAsInputValue(toFormat) {
    if(!(toFormat instanceof Date)) return null;
    return toFormat.getFullYear() + "-" + pad(toFormat.getMonth() + 1, "00") + "-" + pad(toFormat.getDate(), "00");
}

function timeAsInputValue(toFormat) {
    if(!(toFormat instanceof Date)) return null;        
    return pad(toFormat.getHours(), "00") + ":" + pad(toFormat.getMinutes(), "00") + ":" + pad(toFormat.getSeconds(), "00");
}

1

आप सभी सुविधाओं की जरूरत नहीं है कि की तरह एक पुस्तकालय Moment.js प्रदान करता है, तो आप के अपने बंदरगाह का उपयोग कर सकते हैं strftime । यह लाइटवेट (1.35 KB बनाम 57.9 KB है जो मोमेंट.जेएस 2.15.0 की तुलना में छोटा है) और अधिकांश कार्यक्षमता प्रदान करता है strftime()

/* Port of strftime(). Compatibility notes:
 *
 * %c - formatted string is slightly different
 * %D - not implemented (use "%m/%d/%y" or "%d/%m/%y")
 * %e - space is not added
 * %E - not implemented
 * %h - not implemented (use "%b")
 * %k - space is not added
 * %n - not implemented (use "\n")
 * %O - not implemented
 * %r - not implemented (use "%I:%M:%S %p")
 * %R - not implemented (use "%H:%M")
 * %t - not implemented (use "\t")
 * %T - not implemented (use "%H:%M:%S")
 * %U - not implemented
 * %W - not implemented
 * %+ - not implemented
 * %% - not implemented (use "%")
 *
 * strftime() reference:
 * http://man7.org/linux/man-pages/man3/strftime.3.html
 *
 * Day of year (%j) code based on Joe Orost's answer:
 * http://stackoverflow.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366
 *
 * Week number (%V) code based on Taco van den Broek's prototype:
 * http://techblog.procurios.nl/k/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html
 */
function strftime(sFormat, date) {
  if (!(date instanceof Date)) date = new Date();
  var nDay = date.getDay(),
    nDate = date.getDate(),
    nMonth = date.getMonth(),
    nYear = date.getFullYear(),
    nHour = date.getHours(),
    aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
    isLeapYear = function() {
      if (nYear&3!==0) return false;
      return nYear%100!==0 || year%400===0;
    },
    getThursday = function() {
      var target = new Date(date);
      target.setDate(nDate - ((nDay+6)%7) + 3);
      return target;
    },
    zeroPad = function(nNum, nPad) {
      return ('' + (Math.pow(10, nPad) + nNum)).slice(1);
    };
  return sFormat.replace(/%[a-z]/gi, function(sMatch) {
    return {
      '%a': aDays[nDay].slice(0,3),
      '%A': aDays[nDay],
      '%b': aMonths[nMonth].slice(0,3),
      '%B': aMonths[nMonth],
      '%c': date.toUTCString(),
      '%C': Math.floor(nYear/100),
      '%d': zeroPad(nDate, 2),
      '%e': nDate,
      '%F': date.toISOString().slice(0,10),
      '%G': getThursday().getFullYear(),
      '%g': ('' + getThursday().getFullYear()).slice(2),
      '%H': zeroPad(nHour, 2),
      '%I': zeroPad((nHour+11)%12 + 1, 2),
      '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth>1 && isLeapYear()) ? 1 : 0), 3),
      '%k': '' + nHour,
      '%l': (nHour+11)%12 + 1,
      '%m': zeroPad(nMonth + 1, 2),
      '%M': zeroPad(date.getMinutes(), 2),
      '%p': (nHour<12) ? 'AM' : 'PM',
      '%P': (nHour<12) ? 'am' : 'pm',
      '%s': Math.round(date.getTime()/1000),
      '%S': zeroPad(date.getSeconds(), 2),
      '%u': nDay || 7,
      '%V': (function() {
              var target = getThursday(),
                n1stThu = target.valueOf();
              target.setMonth(0, 1);
              var nJan1 = target.getDay();
              if (nJan1!==4) target.setMonth(0, 1 + ((4-nJan1)+7)%7);
              return zeroPad(1 + Math.ceil((n1stThu-target)/604800000), 2);
            })(),
      '%w': '' + nDay,
      '%x': date.toLocaleDateString(),
      '%X': date.toLocaleTimeString(),
      '%y': ('' + nYear).slice(2),
      '%Y': nYear,
      '%z': date.toTimeString().replace(/.+GMT([+-]\d+).+/, '$1'),
      '%Z': date.toTimeString().replace(/.+\((.+?)\)$/, '$1')
    }[sMatch] || sMatch;
  });
}

नमूना उपयोग:

strftime('%F'); // Returns "2016-09-15"
strftime('%A, %B %e, %Y'); // Returns "Thursday, September 15, 2016"

// You can optionally pass it a Date object...

strftime('%x %X', new Date('1/1/2016')); // Returns "1/1/2016 12:00:00 AM"

नवीनतम कोड यहां उपलब्ध है: https://github.com/thdoan/strftime


0

"2012-12-29" को वापस करने के लिए एक तिथि प्रारूप करने का सही तरीका जावास्क्रिप्ट तिथि प्रारूप की स्क्रिप्ट के साथ है :

var d1 = new Date();
return d1.format("dd-m-yy");

यह कोड काम नहीं करता है:

var d1 = new Date();
d1.toString('yyyy-MM-dd');      

3
आपको उपरोक्त लिपि से जुड़ी "जावास्क्रिप्ट तिथि प्रारूप" की आवश्यकता है
सेबस्टियन वियरेक

0

व्यक्तिगत रूप से, क्योंकि मैं समान उपायों में PHP और jQuery / जावास्क्रिप्ट दोनों का उपयोग करता हूं, मैं php.js http://phpjs.org/functions/date/ से दिनांक फ़ंक्शन का उपयोग करता हूं

एक लाइब्रेरी का उपयोग करना जो समान प्रारूप के तार का उपयोग करता है जैसा कि मुझे पहले से ही पता है कि मेरे लिए कुछ आसान है, और तिथि फ़ंक्शन के लिए सभी प्रारूप स्ट्रिंग संभावनाओं से युक्त मैनुअल php.net पर ऑनलाइन है।

आप अपने पसंदीदा तरीके का उपयोग करके अपने HTML में दिनांक.js फ़ाइल को शामिल करें, फिर इसे इस तरह से कॉल करें:

var d1=new Date();
var datestring = date('Y-m-d', d1.valueOf()/1000);

आप value1 () के बजाय d1.getTime () का उपयोग कर सकते हैं (यदि आप चाहें, तो वे एक ही काम करते हैं।

जावास्क्रिप्ट टाइमस्टैम्प के 1000 से भाग इसलिए है क्योंकि एक जावास्क्रिप्ट टाइमस्टैम्प मिलिसैकेड में है, लेकिन एक PHP टाइमस्टैम्प सेकंड में है।


0

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

// 11/6/2000
kendo.toString(new Date(value), "d")

// Monday, November 06, 2000
kendo.toString(new Date(2000, 10, 6), "D")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.