2010-10-25 25 views
9

के साथ एक समय स्ट्रिंग मैं अपने वेबपैड में दिनांक और समय को संभालने के लिए उत्कृष्ट (लेकिन बड़ी) DateJS लाइब्रेरी का उपयोग कर रहा हूं। मैं बस कुछ ऐसा हुआ जो मुझे यकीन नहीं है कि कैसे संभालना है।पर्स केवल दिनांक जेएस

मैं चाहता हूं कि मेरे उपयोगकर्ता केवल समय के बिना टाइम स्ट्रिंग दर्ज कर सकें, लेकिन वे इसे किसी भी तरीके से दर्ज करने में सक्षम होना चाहिए।

  • 5:00 बजे
  • 17:00
  • 5:00 बजे
  • 5:: उदाहरण के लिए 00p
  • 5p
  • आदि

का उपयोग Date.parse(value) इन धर्मान्तरित एक पूरी तारीख में तार, जो वास्तव में मैं चाहता हूँ।

  • बैठे 17:00
  • 1/1/2010 17:00
  • आदि

मैं: हालांकि, यह भी उपयोगकर्ता एक तारीख स्ट्रिंग के किसी अन्य भाग में प्रवेश करने, जैसे की अनुमति देता है मैं समय मूल्य के लिए इनपुट फ़ील्ड को सत्यापित करने के लिए DateJS का उपयोग करने का प्रयास कर रहा हूं। कुछ ऐसा:

function validateTime(value) { 
    return Date.parse(value) !== null; 
} 

क्या यह हल करने के लिए डेटजेएस सुविधाओं का उपयोग करने का कोई तरीका है? अन्य SO questions हैं जो समाधान प्रदान करते हैं, लेकिन यदि डेटजेएस के पास ऐसा करने का कोई तरीका है, तो मैं वास्तव में ऐसा करने के लिए अपने ऐप में अधिक कस्टम कोड नहीं जोड़ना चाहता हूं।

उत्तर

9

मेरे प्रश्न पूछने के कुछ ही समय बाद, मुझे पता चला कि Date.parseExact() स्वरूप स्ट्रिंग्स की एक सरणी ले सकता है। किसी भी तरह से मुझे याद आती है। मैं कुछ निम्न कोड के साथ काम कर पाने में कामयाब रहे:

function validateTime(input) { 
    return Date.parseExact(input, [ 
      "H:m", 
      "h:mt", 
      "h:m t", 
      "ht","h t"]) != null || 
     Date.parseExact(input, [ 
      "h:mtt", 
      "h:m tt", 
      "htt","h tt"]) != null; 
}; 

ध्यान दें कि कुछ प्रारूपों में एक ही समय है, जिसके कारण मैं उन्हें दो अलग-अलग parseExact में विभाजित में एक साथ शामिल होने के लिए सक्षम होने के लिए नहीं है() कहता है। इस मामले में, मैं उस स्ट्रिंग को शामिल नहीं कर सका जिसमें एक t था जिसमें प्रारूप तारों के साथ इसमें डबल tt था।

+1

24 घंटे के नोटेशन (उर्फ सैन्य समय या खगोलीय समय) की अनुमति देने के लिए पैटर्न "एचएचएमएम" का भी उपयोग करें। – JustinStolle

5

योजक दृष्टिकोण बोझिल लगता है। मेरी राय में डेटजेएस की सुंदरता लेता है। मैं एक ही समाधान की जरूरत है और सिर्फ sneakily DateJS साथ पार्स करने से पहले अपने इनपुट स्ट्रिंग के सामने तारीख संलग्न करने का फैसला किया:

var parsed = Date.parse(Date.today().toString('M/d/yyyy') + ' ' + this.value); 

if (parsed) { 
    alert(parsed.toString('h:mm tt')); 
} 

अब DateJS, इसकी तिथि-भाग पार्स पैटर्न से किसी के लिए चारों ओर सूँघने नहीं किया जाएगा आप के रूप में पहले से ही इसे घटा दिया है।

उम्मीद है कि यह किसी की मदद करेगा!

+1

अच्छा विचार, मैंने प्रस्तावित समाधान से कहीं अधिक सरल! और बल्कि स्पष्ट ... निराश है कि मैंने इसके बारे में नहीं सोचा था;) – Tauren

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