2012-05-30 19 views
5

XQuery में डेट रूपांतरण के लिए उपयोगी कार्यों का एक सेट है। लेकिन वास्तविक तिथि में "आज" और "कल" ​​जैसी सापेक्ष तिथियों को कैसे परिवर्तित करें?"आज" और "कल" ​​जैसे सापेक्ष तिथियों को एक XQuery डेट ऑब्जेक्ट में कैसे परिवर्तित करें?

उदाहरण के लिए "आज, 17:33" को "2012-05-30" में परिवर्तित किया जाना चाहिए, और "कल, 22:13" से "2012-05-29"।

उत्तर

8

1. दिनांक स्ट्रिंग

दिनांक स्ट्रिंग को पार्स करें। मैंने एक छोटा सा फ़ंक्शन प्रदान किया जो शब्द को इंगित करता है और इसे पार करता है। मैंने तिथियों के लिए कुछ और सुविधाजनक नाम जोड़े, लेकिन अगर आप निचले मामले में आसानी से जोड़ सकते हैं, तो नोटिस मैं कम-मामले में बदल सकता हूं! यह मिलान तिथि की गणना के लिए XQuery date and time functions का उपयोग करता है।

declare function local:from-relative-date($string as xs:string) as xs:date { 
    switch (lower-case(substring-before($string, ","))) 
     case "today"    return current-date() 
     case "yesterday"   return current-date() - xs:dayTimeDuration('P1D') 
     case "day before yesterday" return current-date() - 2 * xs:dayTimeDuration('P1D')  
     case "tomorrow"    return current-date() + xs:dayTimeDuration('P1D')  
     case "day after tomorrow" return current-date() + 2 * xs:dayTimeDuration('P1D')  
     default      return error(xs:QName("XPTY0004"), "Unknown Date") 
}; 

2. स्वरूप तारीख

अब XQuery 3.0 समारोह format-date(...) का उपयोग करें (मुझे आशा है कि अपने XQuery इंजन इसका समर्थन करता है, BaseX जो मैं इस उदाहरण के लिए इस्तेमाल किया है) दिनांक स्ट्रिंग स्वरूपित करने के लिए की तरह आपको इसकी आवश्यकता :

format-date(local:from-relative-date("Yesterday, 22:13"), "[Y]-[M00]-[D00]") 

यह नहीं है, आप month और day के लिए year-from-date(...) और अनुसार कार्यों का उपयोग करना होगा, तो कुछ स्वरूपण नंबर का उपयोग करने और अपने आप को श्रेणीबद्ध।

+0

+1, ओह यह इस तरह की चीजें हैं। हमें वास्तव में उस स्थान को मनाने की जरूरत है जिसे मैं अपने अस्तित्व को अद्यतन करने के लिए काम करता हूं! – matchew