2016-01-04 30 views
11

में एक तिथि स्ट्रिंग स्वरूपण मैं प्रतिक्रिया मूल में एक तिथि स्ट्रिंग प्रारूपित करने की कोशिश कर रहा हूँ।प्रतिक्रिया मूल

पूर्व: 2016-01-04 10:34:23

के बाद कोड मैं का उपयोग कर रहा है।

var date = new Date("2016-01-04 10:34:23"); 
console.log(date); 

मेरे समस्या यह है, जब मैं एक iPhone 6S पर इस नकल कर रहा हूँ, यह किसी भी समस्या के बिना सोम Jan 04 2016 10:34:23 GMT+0530 (IST) प्रिंट होगा। लेकिन अगर मैं आईफोन 5 एस के साथ कोशिश करता हूं तो यह कुछ भी प्रिंट नहीं करता है। और यदि आप date.getMonth() जैसी विधि का उपयोग कर महीने प्राप्त करने का प्रयास करते हैं तो यह "NaN" प्रिंट करेगा।

यह क्यों है? कामकाज क्या है?

+3

आप कभी भी इस के लिए एक समाधान मिला? –

उत्तर

31

मूल निवासी की प्रतिक्रिया सुंदरता है कि यह Moment.js तरह जे एस Librarieis के बहुत समर्थन करता है। moment.js का उपयोग करते हुए एक बेहतर/आसान

बस टर्मिनल में इस चलाने के दिनांक/समय को संभालने के लिए रास्ता बजाय खरोंच से कोडिंग होगा:

npm install moment --save 

और अपनी प्रतिक्रिया मूल निवासी js पेज:

import Moment from 'moment'; 

render(){ 
    Moment.locale('en'); 
    var dt = '2016-05-02T00:00:00'; 
    return(<View> {Moment(dt).format('d MMM')} </View>) //basically you can do all sorts of the formatting and others 
} 

आप यहाँ पर https://momentjs.com/docs/

1

दिनांक निर्माता यह अनुमति देता है कि यह कितना आसान है। जिस स्ट्रिंग को आप पास करते हैं उसे Date.parse() द्वारा समर्थित किया जाना चाहिए, और यदि यह असमर्थित है, तो यह NaN वापस आ जाएगा। जावास्क्रिप्ट के विभिन्न संस्करण विभिन्न प्रारूपों का समर्थन करते हैं, यदि वे प्रारूप आधिकारिक आईएसओ दस्तावेज से विचलित हो जाते हैं।

यहाँ क्या समर्थित है के लिए उदाहरण देखें: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

3

डॉक्स सरकारी moment.js जाँच कर सकते हैं एक बुल शामिल करने के लिए कोई जरूरत नहीं है इस तरह के एक साधारण मुद्दे को ठीक करने के लिए Moment.js जैसे ky लाइब्रेरी।

जो समस्या आप सामना कर रहे हैं वह फ़ॉर्मेटिंग के साथ नहीं है, लेकिन पार्सिंग के साथ है।

जैसा कि जॉन शम्मास ने दूसरे उत्तर में उल्लेख किया है, Date कन्स्ट्रक्टर (और Date.parse) इनपुट के बारे में पसंद करते हैं। आपका 2016-01-04 10:34:23 एक जावास्क्रिप्ट कार्यान्वयन में काम कर सकता है, लेकिन दूसरे में जरूरी नहीं है।

According to the specification of ECMAScript 5.1, Date.parse आईएसओ 8601 का समर्थन (सरलीकरण) का समर्थन करता है। यह अच्छी खबर है, क्योंकि आपकी तिथि पहले ही आईएसओ 8601 जैसी है।

आपको बस इतना करना है कि इनपुट प्रारूप को थोड़ा सा बदल दें। T: 2016-01-04T10:34:23 के लिए स्थान स्वैप करें; और वैकल्पिक रूप से एक समय क्षेत्र जोड़ें (2016-01-04T10:34:23+01:00), अन्यथा यूटीसी माना जाता है।

1
function getParsedDate(date){ 
    date = String(date).split(' '); 
    var days = String(date[0]).split('-'); 
    var hours = String(date[1]).split(':'); 
    return [parseInt(days[0]), parseInt(days[1])-1, parseInt(days[2]), parseInt(hours[0]), parseInt(hours[1]), parseInt(hours[2])]; 
} 
var date = new Date(...getParsedDate('2016-01-04 10:34:23')); 
console.log(date); 
क्योंकि तारीख तार के पार्स में प्रसरण की

, यह की सिफारिश की है मैन्युअल रूप से कभी तार पार्स करने के लिए के रूप में परिणाम असंगत, विशेष रूप से जहां तार की तरह "2015/10/12 12 विभिन्न ECMAScript कार्यान्वयन भर में कर रहे हैं : 00: 00 "NaN, UTC या स्थानीय टाइमज़ोन के रूप में पार्स किया जा सकता है।

... संसाधन में वर्णित हैं:

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

संबंधित मुद्दे