2013-07-17 8 views
12

Globalize.js आप एक तिथि वर्तमान संस्कृति पर आधारित स्ट्रिंग पार्स करने की अनुमति देता है लागू कियाGlobalize.js - कैसे दिनांक और समय पार्स करने के लिए के बजाय सिर्फ तारीख

var date = Globalize.parseDate("17/07/2013"); //Wed Jul 17 00:00:00 PDT 2013 

मुझे क्या करना चाहते हैं दिनांक समय पार्स है। जावास्क्रिप्ट दिनांक ऑब्जेक्ट इसे संभालता है, मुझे आश्चर्य है कि Globalize.js लाइब्रेरी नहीं है।

var date = new Date("07/17/2013 11:55 pm"); //Wed Jul 17 23:55:00 PDT 2013 
var date = Globalize.parseDate("07/17/2013 11:55 pm"); //null 

क्या मुझे कुछ याद आ रही है? मैं खुद को समय के हिस्से को पार्स करने की ओर झुका रहा हूं। क्या कोई अन्य लाइब्रेरी है जो Globalize.js फैली हुई है जो इस प्रकार की कार्यक्षमता प्रदान करती है? मैंने चारों ओर देखा है लेकिन ज्यादा नहीं मिला है।

अद्यतन w/स्वीकार किए जाते हैं जवाब

आप तारीख पार्स कर सकते हैं अगर आप प्रारूप है कि तारीख में है।

var date = Globalize.parseDate("17/07/2013 11:55 pm", "MM/dd/yyyy hh:mm tt"); 
    //date = null 

मेरे उदाहरण में तारीख क्योंकि यह शून्य हो जाएगा उम्मीद है कि समय अवधि a.m या p.m. के प्रारूप में होगी। एक बार जब मैंने बदल दिया कि मैं एक डेटाटाइम पार्स करने में सक्षम था।

var date = Globalize.parseDate("17/07/2013 11:55 p.m.", "MM/dd/yyyy hh:mm tt"); 
    //date = Wed Jul 17 23:55:00 PDT 2013 

नोट: यह केवल लागू होता है के लिए पदावनत 0.x. वैश्वीकृत

नोट 2: एक हार्डकोडेड पैटर्न पासिंग नहीं एक i18n सिफारिश है।

+0

हार्डकोडेड पैटर्न पास करना i18n अनुशंसा नहीं है। आपको इसके बजाय कंकाल का उपयोग करना चाहिए (ग्लोबलइज़ 1.x) http://stackoverflow.com/a/30237866/798133। –

उत्तर

11

आप पैटर्न आप उपयोग कर रहे जानते हैं:

var date = Globalize.parseDate("07/17/2013 11:55 pm", "MM/dd/yyyy hh:mm tt"); 

आप पैटर्न को नहीं जानते हैं:

var date = Globalize.parseDate("07/17/2013 11:55 pm", Globalize.culture().calendar.patterns.d + " " + Globalize.culture().calendar.patterns.t) 

रेखा से ऊपर वर्तमान संस्कृति संभालने है, यदि आप अन्य के लिए इसकी आवश्यकता संस्कृति या यदि आपने Globalize.culture ("") को कॉल करके स्थानीय संस्कृति की स्थापना नहीं की है तो बस संस्कृति() पर संस्कृति निर्दिष्ट करें।

मैं कुछ ही मिनट पहले इस परिदृश्य पर भाग गया था, और यह समाधान मिला, नवीनतम यह गन्दा है, मुझे आशा है कि ऐसा करने के लिए एक क्लीनर तरीका है।

नोट: यह केवल बहिष्कृत ग्लोबलize 0.x पर लागू होता है।

नोट 2: एक हार्डकोडेड पैटर्न पासिंग नहीं एक i18n सिफारिश है।

+0

मैं बस समय का विश्लेषण करना चाहता था, इसलिए मैंने Globalize.parseDate ("11:55 बजे", Globalize.culture()। Calendar.patterns.t) का उपयोग किया। लेकिन परिणामस्वरूप मैं शून्य हो गया। कोई सलाह? –

+0

@ मार्कैंडबैथ बस अपनी टाइम स्ट्रिंग पर एक वैध दिनांक स्ट्रिंग को प्रीपेड करें और ग्लोबलइज़.परसेडेट –

+1

पर कॉल करें मुझे लगता है कि यह समाधान 'वैश्वीकरण' संस्करण 0.x पर लागू होगा, लेकिन लाइब्रेरी के 1.x संस्करण के लिए नहीं –

2

मैं moment.js में विचार करेंगे, इसके साथ आप

d = moment("17/07/2013 11:55 pm" , "DD/MM/YYYY HH:mm a"); // parsed as 11:55pm local time 
d = d.toDate(); //get it as a native js date object 

कर सकते हैं जब तक आप एक समय क्षेत्र ऑफसेट निर्दिष्ट एक स्ट्रिंग को पार्स मौजूदा उपयोगकर्ताओं समय क्षेत्र में एक तिथि का निर्माण करेगा।

+2

मुझे क्षण/समय में हेरफेर की बात आती है जब मैं बहुत उपयोगी होता हूं। हालांकि परिदृश्यों में मैं ज्यादातर बार सौदा करता हूं कि संस्कृति या तो उपयोगकर्ता या ब्राउज़र द्वारा परिभाषित की जाती है, इसलिए मुझे हाथ से पहले सही पैटर्न नहीं पता है। मैं आमतौर पर कुछ ऐसा करता हूं जैसे: पल ("16/07/2012 12:45", पल()। Lang() ._ longDateFormat.L + "" + moment()। Lang() ._ longDateFormat.LT) .toDate() जो ग्लोबलनाइज़ेशन का उपयोग करके नीचे दिए गए मेरे उत्तर के समान है। क्या आपको पता है कि कोई छोटा रास्ता है? –

3

ग्लोबलनाइजेशन 1.x सीएलडीआर पर आधारित है और अब एक अलग एपीआई है।आपको जो चाहिए उसे पूरा करने के लिए नए कोड का पालन करें:

Globalize("en").parseDate("5/14/2015, 9:47 AM", {skeleton: "yMdhm"}); 
// > Thu May 14 2015 09:47:00 GMT-0300 (BRT) 

More information and examples
More information on how to load CLDR
Notes on how to use CLDR patterns

+0

कैसे होगा आप अल्पविराम के बजाय एक अलग विभाजक सेट करते हैं? yMdHm अल्पविराम के रूप में अल्पविराम (,) को लागू करता है जबकि मुझे अंतरिक्ष की आवश्यकता होती है। – Jimit

+0

वैश्वीकरण उस संबंध में उदार नहीं है, यानी, एक शाब्दिक को अनदेखा करने या किसी भी शाब्दिक को स्वीकार करने के लिए। (नोट अल्पविराम और अंतरिक्ष प्रारूप द्वारा परिभाषित एक शाब्दिक है)। ग्लोबलनाइजेशन पर इसे खिलाने से पहले एक हैकी समाधान सीएलडीआर डेटा को संशोधित करना होगा। वैकल्पिक रूप से, क्या आप https://github.com/rxaviers/react-date-input जैसे निर्देशित इनपुट का उपयोग कर सकते हैं? –

1

स्वीकृत उत्तर का अर्थ है कि सभी दिनांक समय फ़ील्ड में पूर्ण तिथि और समय होना चाहिए। हालांकि, यह स्वीकार्य से अधिक है कि कुछ क्षेत्रों में सिर्फ एक तारीख होगी। इसलिए मैंने अपना कस्टम पैटर्न जोड़ने के लिए globalize.culture.en-AU.js को संशोधित किया।

Globalize.addCultureInfo("en-AU", "default", { 
    name: "en-AU", 
    englishName: "English (Australia)", 
    nativeName: "English (Australia)", 
    numberFormat: { 
     currency: { 
      pattern: ["-$n","$n"] 
     } 
    }, 
    calendars: { 
     standard: { 
      firstDay: 1, 
      patterns: { 
       d: "d/MM/yyyy", 
       D: "dddd, d MMMM yyyy", 
       f: "dddd, d MMMM yyyy h:mm tt", 
       F: "dddd, d MMMM yyyy h:mm:ss tt", 
       M: "dd MMMM", 
       Y: "MMMM yyyy", 
       Z: "dd/MM/yyyy hh:mm:ss tt" // This is a custom one for our specifications. 
      } 
     } 
    } 
}); 

यह द्वारा संशोधित करके सबसे अच्छा समाधान नहीं है, लेकिन मेरी और सबसे दूसरों प्रयोजन के लिए वे upgrading the Globalization.js from version 0.x to 1.x कभी भी जल्द ही नहीं होगा।

इस उत्तर का अर्थ है कि आप समय के साथ एक तिथि, और एक ही परियोजना में और उसी पृष्ठ पर एक तारीख फ़ील्ड कर सकते हैं।

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