जावास्क्रिप्ट में आईएसओ तिथि को yyyy-mm-dd दिनांक स्वरूप में बदलें


109

मैं एक आईएसओ 8601 तारीख से yyyy-mm-dd प्रारूप होने की तारीख कैसे प्राप्त कर सकता हूं ?

मेरी 8601 तारीख है

2013-03-10T02:00:00Z

मैं निम्नलिखित कैसे प्राप्त कर सकता हूं?

2013-03-10

2
क्या आपने वास्तव में इसे करने की कोशिश की है? यह एक नया प्रश्न नहीं है जिसका उत्तर कई बार दिया गया है।
bPratik


14
date.split("T")[0]करना होगा
अरविंद गोपी

जवाबों:


100

इसे इस्तेमाल करे

date = new Date('2013-03-10T02:00:00Z');
date.getFullYear()+'-' + (date.getMonth()+1) + '-'+date.getDate();//prints expected format.

अपडेट करें:-

जैसा कि टिप्पणियों में बताया गया है, मैं जरूरत पड़ने पर तारीख और महीने के लिए अग्रणी शून्य प्रिंट करने के लिए उत्तर अपडेट कर रहा हूं।

date = new Date('2013-08-03T02:00:00Z');
year = date.getFullYear();
month = date.getMonth()+1;
dt = date.getDate();

if (dt < 10) {
  dt = '0' + dt;
}
if (month < 10) {
  month = '0' + month;
}

console.log(year+'-' + month + '-'+dt);


17
ध्यान दें, मुझे नहीं लगता कि यह दिन या महीने के लिए एक अग्रणी शून्य प्रिंट करेगा
user3413723

2
@ User3413723 के साथ सहमत इस सवाल का जवाब नहीं है क्योंकि यह 0 को हटाता है इसलिए YYYY-MM-DD प्रारूप की आवश्यकताओं को पूरा नहीं करता है
जेम्स मर्फी

वर्किंग फाइन @ म्रत्युंजय
रवि डेलिक्सन

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

सर आप मुझे बता सकते हैं कि 2013 3 1 को कैसे पास किया जाए। इस फॉर्मेट की नई तारीख (तारीख)
कपिल सोनी

143

बस स्ट्रिंग फसल:

var date = new Date("2013-03-10T02:00:00Z");
date.toISOString().substring(0, 10);

या यदि आपको स्ट्रिंग से केवल तारीख की आवश्यकता है।

var strDate = "2013-03-10T02:00:00Z";
strDate.substring(0, 10);

3
मुझे लगता है कि यह उन सभी से सबसे आसान और सबसे सुंदर समाधान है, लेकिन क्या इसके लिए कोई गिरावट है?
ऐडा_आदि

30
@Aida_Aida एकमात्र मुद्दा जो मैं सोच सकता हूं, वह यह है कि यदि आपका कोड भविष्य में कम से कम 8000 वर्षों में भू-स्केल-स्केल समय से संबंधित है, तो आपका कोड टूट सकता है क्योंकि प्रारूप YYYYY-MM-DDवर्ष 10000 में होगा । इससे बचने के लिए आप इस पर विभाजित हो सकते हैं Tइसके बजाय चरित्र। ( En.wikipedia.org/wiki/Year_10,000_problem देखें )
अप्सिलर्स

9
ISOString UTC है, लेकिन दिनांक ऑब्जेक्ट स्थानीय है, क्योंकि इस तरह से टाइमज़ोन को सही तरीके से हैंडल नहीं किया जा सकेगा। आपको इसे ध्यान में रखना होगा।
गिलियूम एफ।

3
@GuillaumeF। एक महत्वपूर्ण विचार लेकिन यह ओपी की आवश्यकताओं का अनुपालन करता है
jamesjansson

मैं इस बात की थाह नहीं लगा सकता कि तार को तारीख तक क्यों रखा जाना चाहिए। सबस्ट्रिंग विकल्प सरल जवाब हो रहा है।
रॉबग

46

आप अच्छी तारीख में हेरफेर के लिए Moment.js , Luxon , date-fns या Day.js चेक कर सकते हैं।

या बस अपने आईएसओ स्ट्रिंग के पहले भाग को निकालें, इसमें पहले से ही आप क्या चाहते हैं। यहाँ पर विभाजित करके एक उदाहरण दिया गया है T:

"2013-03-10T02:00:00Z".split("T")[0] // "2013-03-10"

15

Moment.js आपके लिए दिनांक स्वरूपण संभाल लेगा। यहां जावास्क्रिप्ट टैग के माध्यम से इसे शामिल करने का तरीका बताया गया है, और फिर एक तारीख को प्रारूपित करने के लिए Moment.js का उपयोग करने का एक उदाहरण है।

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

moment("2013-03-10T02:00:00Z").format("YYYY-MM-DD") // "2013-03-10"

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

2
momentसिर्फ स्वरूपण के लिए उपयोग करने के लिए एक बहुत बड़ा पुस्तकालय है। बल्कि डेट-फेंस का उपयोग करें जो आकार में बहुत छोटा है और समान कार्यक्षमता देता है।
होजेफ़ा

@ होज़ेफ़ा, फिर अपने समाधान के साथ ओपी प्रश्न का उत्तर दें।
हैरिस

1
@ हैरिस - काम सुचारू रूप से किया!
हदीदअली

काश कुछ पल .toISODateString()ऐसा होता, जैसा कि बहुत बार-बार होता है ...
लेव लुकोम्स्की

12

यह वही है जो मैं केवल तारीख पाने के लिए करता हूं:

let isoDate = "2013-03-10T02:00:00Z";

alert(isoDate.split("T")[0]);


2
यह वास्तव में विभाजन का प्रस्ताव करने का पहला उत्तर है () विचार उत्तर के रूप में उत्तर के रूप में दूर के रूप में मैं बता सकता है और मैं प्रयास बनाम विश्वसनीयता बनाम समाधान के लिए प्रभावी ढंग से कारक की तरह है कि हालांकि मैं पल () का उपयोग हर जगह मैं कर सकता हूँ।
बरसाती

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

9

Moment.js एकल उपयोग मामले के लिए उपयोग करने के लिए बहुत बड़ी लाइब्रेरी है। मैं date-fnsइसके बजाय उपयोग करने की सलाह देता हूं । यह मूल रूप से एक बहुत छोटे बंडल आकार और कई के साथ Moment.js की सबसे अधिक कार्यक्षमता प्रदान करता है formatting options

import format from 'date-fns/format'
format('2013-03-10T02:00:00Z', 'YYYY-MM-DD'); // 2013-03-10, YYYY-MM-dd for 2.x

एक बात ध्यान देने योग्य है कि, क्योंकि यह आईएसओ 8601 समय प्रारूप है, ब्राउज़र आमतौर पर UTC समय से स्थानीय समयक्षेत्र में परिवर्तित होता है। हालांकि यह सरल उपयोग मामला है जहां आप शायद कर सकते हैं '2013-03-10T02:00:00Z'.substring(0, 10);

अधिक जटिल रूपांतरणों date-fnsके लिए रास्ता तय करना है।


6

let isoDate = "2013-03-10T02:00:00Z";
var d = new Date(isoDate);
d.toLocaleDateString('en-GB'); // dd/mm/yyyy
d.toLocaleDateString('en-US'); // mm/dd/yyyy


d.toLocaleDateString ( 'en-GB'); एक जादू की तरह काम करता है। बहुत बढ़िया जवाब!
डोनाल्ड शाहिनी


4

यह YYYY-MM-DD प्रारूप में दिनांक को आउटपुट करेगा:

let date = new Date();
date = date.toISOString().slice(0,10);

मुझे नहीं पता कि इसे अधिक वोट क्यों नहीं मिल रहे हैं, इसने पूरी तरह से काम किया, और इस सवाल का जवाब कम से कम प्रयास के साथ दिया
Wolfiebae

4

दिनांक ऑब्जेक्ट में अपना दिनांक पास करें:

var d = new Date('2013-03-10T02:00:00Z');
d.toLocaleDateString().replace(/\//g, '-');

1
toLocaleDateString () "/" प्रारूप में देगा। नहीं "-" प्रारूप।
टेकक्रंच 20

आप "/" के साथ "-" के स्थान पर उपरोक्त का उपयोग कर सकते हैं। सबसे सुरुचिपूर्ण नहीं है, हालांकि अगर टोकालेडेडस्ट्रीमिंग कभी बदलती है
जेम्स मर्फी

ToLocaleDateString का परिणाम सभी उपयोगकर्ताओं के लिए संगत नहीं है, इसलिए अच्छी तरह से ओपी द्वारा अपेक्षित परिणाम का उत्पादन नहीं कर सकता है।
रॉब

4

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

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

इस उदाहरण को देखें:

const timeZoneRelatedDate = new Date(2020, 0, 14, 0, 0);

console.log(timeZoneRelatedDate.toLocaleDateString(
    'ja-JP', 
    {
      year: 'numeric',
      month: '2-digit',
      day: '2-digit'
    }
).replace(/\//gi,'-'));

// RESULT: "2020-01-14"

console.log(timeZoneRelatedDate.toISOString());

// RESULT: "2020-01-13T23:00:00.000Z" (for me in UTC+1)

console.log(timeZoneRelatedDate.toISOString().slice(0,10));

// RESULT: "2020-01-13"

3

यदि आपके पास कोई दिनांक ऑब्जेक्ट है:

let date = new Date()
let result = date.toISOString().split`T`[0]

console.log(result)

या

let date = new Date()
let result = date.toISOString().slice(0, 10)

console.log(result)


1
यूआईओएसट्रींग यूटीसी का उपयोग करता है, जो मध्यरात्रि से स्थानीय टाइमज़ोन ऑफसेट की अवधि के लिए गलत स्थानीय तारीख का उत्पादन करेगा।
रॉग सेप

1

Rk rk के समाधान पर विस्तार करने के लिए : यदि आप समय को शामिल करने के लिए प्रारूप चाहते हैं, तो आप इसे toTimeString()अपनी स्ट्रिंग में जोड़ सकते हैं , और फिर GMT के भाग को निम्नानुसार खींच सकते हैं:

var d = new Date('2013-03-10T02:00:00Z');
var fd = d.toLocaleDateString() + ' ' + d.toTimeString().substring(0, d.toTimeString().indexOf("GMT"));

0

मैंने इसका उपयोग किया:

HTMLDatetoIsoDate(htmlDate){
  let year = Number(htmlDate.toString().substring(0, 4))
  let month = Number(htmlDate.toString().substring(5, 7))
  let day = Number(htmlDate.toString().substring(8, 10))
  return new Date(year, month - 1, day)
}

isoDateToHtmlDate(isoDate){
  let date = new Date(isoDate);
  let dtString = ''
  let monthString = ''
  if (date.getDate() < 10) {
    dtString = '0' + date.getDate();
  } else {
    dtString = String(date.getDate())
  }
  if (date.getMonth()+1 < 10) {
    monthString = '0' + Number(date.getMonth()+1);
  } else {
    monthString = String(date.getMonth()+1);
  }
  return date.getFullYear()+'-' + monthString + '-'+dtString
}

स्रोत: http://gooplus.fr/en/2017/07/13/angular2-typescript-isodate-to-html-date/



0
let dt = new Date('2013-03-10T02:00:00Z');
let dd = dt.getDate();
let mm = dt.getMonth() + 1;
let yyyy = dt.getFullYear();

if (dd<10) {
    dd = '0' + dd;
}
if (mm<10) {
    mm = '0' + mm;
}
return yyyy + '-' + mm + '-' + dd;

0

@Hozefa द्वारा उत्तर का एक बेहतर संस्करण ।

यदि आपने date-fnsस्थापित किया है, तो आप formatISO फ़ंक्शन का उपयोग कर सकते हैं

const date = new Date(2019, 0, 2)
import { formatISO } from 'date-fns'
formatISO(date, { representation: 'date' }) // '2019-01-02' string

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.