2013-07-26 9 views
25

मुझे अपने कोड में तिथियों के बिना टाइम्स को पार्स और हेरफेर करने की आवश्यकता है। उदाहरण के लिए मुझे एक timepicker से स्ट्रिंग "15:00" मिल सकती है। मैं इसे किसी प्रकार की टाइम ऑब्जेक्ट में बदलना चाहता हूं - मैं आमतौर पर पाइथन में काम करता हूं जिसमें अलग दिनांक, समय और डेटाटाइम ऑब्जेक्ट्स होते हैं।जावास्क्रिप्ट पार्सिंग टाइम्स बिना दिनांक

हालांकि सभी समाधान मैंने दिनांक वस्तु का उपयोग करने पर ध्यान केंद्रित किया है। यह "15:00" जैसी स्ट्रिंग को पार्स नहीं कर सकता है क्योंकि इसे दिन की जानकारी की आवश्यकता होती है। मैं टाइम्स को मनमाने ढंग से दिनांक जानकारी नहीं जोड़ना चाहता - विशेष रूप से जब दिन दिन और लोकेल के आधार पर डेटलाइट बचत जैसी चीजों के बारे में धारणाएं प्रतीत होता है, और ऐसा लगता है कि यह समय स्वचालित रूप से उस समय का अनुवाद करने का प्रयास कर रहा है दिया गया लोकेल। इसके अलावा मैं समय जोड़ने में सक्षम होना चाहता हूं, उदा। "15:00 + 1 घंटा"

तारीखों से जुड़े "कच्चे" समय को पार्स करने और संभालने के लिए अनुशंसित समाधान क्या है?

+0

यदि आप ऐसा करने के लिए अपना कोड लिखना नहीं चाहते हैं, तो [Moment.js] (http://momentjs.com) या [Date.js] (http://www.datejs.com) है । – Pointy

+0

मैं आपको अपने लिए आवश्यक कुछ लाइनों को लिखने की अनुशंसा करता हूं। चूंकि कोई कैलेंडर चिंता नहीं है, यह आसान है। –

+0

यही वह है जिसे मैं टालने की उम्मीद कर रहा था। Moment.js और Date.js दोनों टाइमटाइम पर ध्यान केंद्रित करते हैं, टाइम्स नहीं, इसलिए आपको इसका उपयोग करने से पहले एक समय तक मनमाने ढंग से दिनांक जानकारी को गोंद करना होगा। मैं कल्पना कर सकता हूं कि यह कार्यान्वित करने के लिए मूल रूप से जटिल नहीं है, लेकिन मुझे आश्चर्य है कि यह पहले से मौजूद नहीं है। – mangecoeur

उत्तर

13

दुर्भाग्य से, कोई अच्छा समाधान नहीं है। जावास्क्रिप्ट में केवल Date ऑब्जेक्ट है, जिसे शायद गलत नाम दिया गया है क्योंकि यह वास्तव में दिनांक + समय है।

एक बात आप के बारे में गहरी सोचने के लिए चाहते हो सकता है - आप कहते हैं कि आप केवल समय के साथ काम करना चाहते हैं, लेकिन आप एक समय दिन-का- मतलब है या आप समय के अवधि क्या मतलब है? ये दो संबंधित हैं, लेकिन थोड़ा अलग अवधारणाएं हैं।

उदाहरण के लिए, आपने कहा था कि आप "15:00 + 1 घंटा" जैसे ऑपरेशन चाहते हैं। वैसे यह स्पष्ट रूप से 16:00 या तो होगा। लेकिन "15:00 + 10 घंटे" के बारे में क्या? यदि आप एक अवधि के बारे में बात कर रहे हैं तो यह 25:00 होगा, लेकिन यदि आप समय-समय पर बात कर रहे हैं तो यह 01:00 हो सकता है।

असल में, यह 01:00 हो सकता है, क्योंकि सभी दिनों में 24 घंटे नहीं होते हैं। कुछ समय क्षेत्र के आधार पर कुछ दिन 23, 23.5, 24.5, या 25 घंटे होते हैं और क्या डीएसटी उस दिन शुरू हो रहा है या रोक रहा है। तो समय-समय पर संदर्भ में, आप शायद अपनी गणना में एक विशेष तिथि और क्षेत्र शामिल करना चाहते हैं। बेशक, यदि आप सीधे 24 घंटे के दिनों के बारे में बात कर रहे हैं, तो यह बिंदु अप्रासंगिक है।

आप के बारे में अवधियों बात कर रहे हैं - आप moment.js पर फिर से देखने के लिए चाहते हो सकता है, लेकिन moment वस्तु पर नहीं। वहाँ एक और वस्तु है, moment.duration। संदर्भ here है।

और आखिरकार, आप संख्याओं के रूप में समय स्ट्रिंग से घंटों और मिनटों को पार्स करने के लिए केवल सादा जावास्क्रिप्ट का उपयोग करने पर विचार करना चाहेंगे। आवश्यक संख्याओं को मैनिपुलेट करें, और फिर एक स्ट्रिंग को दोबारा आउटपुट करें। लेकिन आपका सवाल ऐसा लगता है कि आप कुछ और प्रबंधित की तलाश में हैं।

+0

दुर्भाग्यवश मैं अवधि के बजाय "दिन का समय" ढूंढ रहा हूं (इसलिए moment.js बाहर है)। ऐसा लगता है कि कोई प्रबंधित समाधान नहीं है और मुझे रेगेक्स स्ट्रिंग पार्सिंग का उपयोग करना है - जो शर्म की बात है क्योंकि यह ऐसी सूक्ष्म बग्स की प्रवण चीज है जो मैं एक अच्छी तरह से परीक्षण लाइब्रेरी द्वारा संभालना पसंद करता हूं। – mangecoeur

+0

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

14

मैं के बाद से मैं पहले से ही मेरे ऐप में moment उपयोग कर रहा था निम्नलिखित का उपयोग कर समाप्त हो गया:

var str = '15:16:33'; 
var d = new moment(str, 'HH:mm:ss'); 

अन्य प्रारूप तार आप उपयोग कर सकते हैं के लिए Moment String+Format docs देखें।

29

यहाँ 12 या 24 घंटे के समय के लिए एक moment.js समाधान है:

moment('7:00 am', ['h:m a', 'H:m']); // Wed Dec 30 2015 07:00:00 GMT-0600 (CST) 
moment('17:00', ['h:m a', 'H:m']); // Wed Dec 30 2015 17:00:00 GMT-0600 (CST) 
moment('17:00 am', ['h:m a', 'H:m']);// Wed Dec 30 2015 17:00:00 GMT-0600 (CST) 
moment('17:00 pm', ['h:m a', 'H:m']);// Wed Dec 30 2015 17:00:00 GMT-0600 (CST) 

http://momentjs.com/docs/#/parsing/string-formats/

+2

मैं इस दिन को देख रहा हूं –

+0

वाह ... यह बिल्कुल है! मूल रूप से दिन के समय की तारीख मेरे (और संभवतः ओपी) उपयोग के मामले के लिए कोई फर्क नहीं पड़ता। एक समय स्ट्रिंग को वैध पलज ऑब्जेक्ट में बदलने के लिए बस जरूरी है। और वेब के आसपास की सभी अन्य पोस्टों को सोचने के लिए ऐसी "दुर्भाग्यपूर्णता" और "असंभव" हेहे की बात की गई। धन्यवाद!! –

1

मैं एक परियोजना के लिए हाल ही में यह करने के लिए किया था, लेकिन वास्तव में फ्लॉप पल शामिल करने के लिए की जरूरत है।जे एस, विधि मैं प्रयोग किया जाता है मैन्युअल रूप से इस तरह समय पार्स करने के लिए किया गया था:

function parseTime(time) {  
    let timeInt = parseInt(time); 
    let minutes = time.substring(3,5); 

    // you could then add or subtract time here as needed 

    if(time > '12:00') { 
     return `${timeInt - 12}:${minutes} PM`; 
    } else { 
     return `${timeInt}:${minutes} AM`; 
    } 
} 

एक विकल्प के स्टार्टर के रूप में इस का प्रयोग करें आप इस समय का उपयोग नहीं करना चाहते हैं। ध्यान दें कि यह उदाहरण es6 वाक्यविन्यास का उपयोग करता है।

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