2010-08-31 15 views
6

मुझे प्रलेखन के आधार पर एक कठिन समय है, यह पता लगाने के लिए कि पर्ल और MySQL के बीच सप्ताह संख्याओं को कैसे समझाया जाए।सप्ताहों के लिए दिनांक प्रारूप

मैं एक ही समय क्षेत्र में यूनिक्स टाइमस्टैम्प के आधार पर पर्ल और MySQL दोनों में एक ही सटीक सप्ताह संख्या की गणना कैसे करूं?

SELECT DATE_FORMAT(from_unixtime(datefield), '%Y%U') FROM table; 

और

print strftime('%Y%U', localtime($datevar)); 

किसी भी टाइमस्टैम्प के लिए समान सप्ताह संख्या का उत्पादन करना चाहिए। आदर्श रूप से मैं सप्ताह संख्या को कुछ पोर्टेबल होना चाहता हूं, जैसे कि ISO 8601। जबकि मेरे परीक्षण में सप्ताह संख्या कभी-कभी मिलती प्रतीत होती है, मुझे पर्ल और माईएसक्यूएल दोनों के लिए प्रलेखन में कुछ भी नहीं मिल रहा है, जो पुष्टि करता है कि दिनांक स्वरूपण स्पष्ट रूप से उसी परिभाषा का पालन करता है।

धन्यवाद!

+0

यह सुनिश्चित नहीं है कि आप इसे PERL में कैसे करते हैं लेकिन MySQL में WEEKOFYEAR() fn http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html# है function_weekofyear – Mikey1980

उत्तर

4

पर्ल के लिए, DateTime मॉड्यूल में देखें।

($week_year, $week_number) = $dt->week; 

ध्यान दें कि साल मामलों, के रूप में एक तारीख पिछले या अगले साल के लिए एक सप्ताह में हो सकता है: यह एक week() विधि, कि किसी दिए गए DateTime वस्तु के लिए इस वर्ष के सप्ताह के नंबर लौट सकते हैं आपूर्ति करती है। यह "सप्ताह" के लिए आईएसओ मानक की वजह से है, जहां वर्ष का पहला सप्ताह जनवरी का चौथा दिन है। इस प्रकार 1 जनवरी की तरह एक तिथि पिछले वर्ष के अंतिम सप्ताह में हो सकती है।

अनियंत्रित आंखों के लिए ऐसा लगता है कि MySQL के YEARWEEK() फ़ंक्शन एक ही चीज़ कर सकता है, या Mikey1980 suggests के रूप में, WEEKOFYEAR() फ़ंक्शन का प्रयास करें। ऐसा लगता है कि YEARWEEK() की तरह एक ही बात करता है, के रूप में its documentation का कहना है:

परिणाम में साल पहले और साल के अंतिम सप्ताह के लिए तिथि बहस में वर्ष से भिन्न हो सकता है।

... लेकिन मैं गारंटी नहीं दे सकता कि वे वही काम करते हैं। :-)

+5

डेटटाइम का 'सप्ताह' आईएसओ 8601 परिभाषा का उपयोग करता है। MySQL को ऐसा करने के लिए, मोड 3 का उपयोग करें: 'YEARWEEK (from_unixtime (datefield), 3) '। – cjm

+1

नोट: POSIX 'strftime' फ़ंक्शन का'% U' सप्ताह संख्या के लिए आईएसओ 8601 परिभाषा का उपयोग नहीं करता है। POSIX जनवरी में पहले रविवार को सप्ताह 1 के पहले दिन के रूप में परिभाषित करता है (आंशिक सप्ताह 0 बनाने से पहले किसी भी दिन)। – cjm

2

MySQL के लिए इस क्वेरी का प्रयास करें:

SELECT WEEKOFYEAR(from_unixtime(datefield)) FROM table; 

क्षमा करें यह केवल 1/2 जवाब आपके की तलाश में है, लेकिन मुझे आशा है कि यह मदद करता है!

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