Moment: कुछ डॉव / डोई कॉम्ब्स के लिए गलत `वीकऑफ यियर`

को निर्मित 21 दिस॰ 2014  ·  13टिप्पणियाँ  ·  स्रोत: moment/moment

ऐसा प्रतीत होता है कि सप्ताह गणना एल्गोरिथ्म सामान्य रूप से पर्याप्त नहीं है, क्योंकि यह कुछ डॉव / डोई संयोजनों को गलत तरीके से संभालने के लिए लगता है:

// see http://en.wikipedia.org/wiki/Seven-day_week#cite_ref-15
moment.locale(moment.locale(), { week: { dow: 6, doy: 1 } });
moment("2012-12-28", "YYYY-MM-DD").week(); // 51 -- should be 52?
moment("2012-12-29", "YYYY-MM-DD").week(); // 52 -- should be 1
moment("2013-01-01", "YYYY-MM-DD").week(); // 52 -- should be 1
moment("2013-01-08", "YYYY-MM-DD").week(); // 53 -- should be 2
moment("2013-01-11", "YYYY-MM-DD").week(); // 53 -- should be 2
moment("2013-01-12", "YYYY-MM-DD").week(); // 1 -- should be 3
moment().weeksInYear(2012); // 52

मैं weekOfYear फ़ंक्शन में कुछ बंद मान रहा हूं, जब तक कि मैं कुछ गलत नहीं कर रहा हूं?

सबसे उपयोगी टिप्पणी

मैं इस तरीके के लिए तर्क नहीं समझा सकता हूँ, कैसे doy परिभाषित किया गया है, लेकिन आप इसे 7 + dow - janX सेट कर सकते हैं, जहाँ janX x-th जनवरी है जो सप्ताह से संबंधित होना चाहिए नंबर 1।

इसलिए, यदि 1 जनवरी को सप्ताह नंबर 1 से संबंधित होना चाहिए और शनिवार सप्ताह का पहला दिन है, तो doy = 7 + 6 - 1 = 12 । आईएसओ के लिए यह doy = 7 + 1 - 4 = 4 लिए doy = 7 + 0 - 1 = 6

सभी 13 टिप्पणियाँ

कोई विचार? यह कई स्थानों को प्रभावित करता है जहां सप्ताह का पहला दिन रविवार या सोमवार नहीं होता है। यदि बग सत्यापित है, तो क्या मुझे बेहतर weekOfYear गणना के लिए पुल अनुरोध प्रस्तुत करना चाहिए, या क्या पहले से मौजूद एल्गोरिथ्म को सही करने की योजना है?

मुझे स्वीकार करना होगा, कि doy सेटिंग मुझे काफी भ्रमित कर रही है। { dow: 6, doy: 12 } अर्थ है कि सप्ताह शनिवार को शुरू होता है और 1 जनवरी के साथ सप्ताह 1 सप्ताह होता है। अगर मैं इसे सही ढंग से समझता हूं {dow:6, doy: 1} का मतलब होगा कि 1 सप्ताह के रास्ते में 26 दिसंबर है।

मैंने पुल अनुरोध में { dow: 6, doy: 12 } साथ एक परीक्षण जोड़ा है।

क्या आपका मतलब { dow: 6, doy: 1 } ? मुझे लगता है कि 7 से अधिक doy मूल्य का कोई वास्तविक अर्थ नहीं है .. क्या वह टाइपो था?

नहीं, मेरा मतलब {dow: 6, doy: 12} । ध्यान दें कि doy _not_ जनवरी का दिन है जो 1 सप्ताह में है। {dow: 6, doy: 12} अरबी देशों में मानक है - सप्ताह शनिवार को शुरू होता है और 1 सप्ताह वह सप्ताह होता है जिसमें 1 जनवरी आती है।

बग वास्तव में तारीख से सप्ताह की गणना में नहीं था, बस दूसरी दिशा में।

वाह, अगर ऐसा है, तो इस पूरे समय doy गलतफहमी रही है ..

वास्तव में, डॉक्स के अनुसार localeData.firstDayOfYear() 0 और 15 के बीच किसी भी पूर्णांक को वापस कर सकता है, लेकिन यह मुझे बहुत अजीब लगता है।

बस मुझे समझने में मदद करने के लिए, क्या आप बता सकते हैं कि यह 12 क्यों है और 1 नहीं है? और इस मामले में doy 1 या 4 संकेत होगा? कैसे, बिल्कुल, गणित यहाँ काम करता है? आपको ऐसा लगता है कि आपको इसकी अच्छी समझ है।

मुझे एक अच्छी व्याख्या मिली, जो यह अधिक स्पष्ट करती है कि doy है, हालांकि मुझे अभी भी यह पता नहीं चल सका है कि यह कभी भी 6 से अधिक कैसे हो सकता है।

@icambron , आप में झंकार कर सकते हैं, कृपया? क्या कहीं ऐसा लिंक है जो वर्तमान में किए गए डॉक्स की तुलना में इसे पूरी तरह से समझाता है?

@usmonster मुझे देखे हुए काफी समय हो गया है, लेकिन मेरे सिर के ऊपर से ... हां, मुझे यह नहीं मिला। क्षमा करें, मैं अधिक सहायक नहीं हो सकता। जब भी मैं जुड़ा हुआ स्पष्टीकरण लिखता हूं, तो मैंने हफ्तों को संभालने के लिए मोमेंट के कार्यान्वयन का एक गुच्छा लिखा था, इसलिए मैंने शायद इसे तब समझा था, लेकिन यह स्पष्टीकरण doy मान> 6 के साथ नहीं लगता है, इसलिए ।। ।

मैं इस तरीके के लिए तर्क नहीं समझा सकता हूँ, कैसे doy परिभाषित किया गया है, लेकिन आप इसे 7 + dow - janX सेट कर सकते हैं, जहाँ janX x-th जनवरी है जो सप्ताह से संबंधित होना चाहिए नंबर 1।

इसलिए, यदि 1 जनवरी को सप्ताह नंबर 1 से संबंधित होना चाहिए और शनिवार सप्ताह का पहला दिन है, तो doy = 7 + 6 - 1 = 12 । आईएसओ के लिए यह doy = 7 + 1 - 4 = 4 लिए doy = 7 + 0 - 1 = 6

आह, अगर यह _implemented_ इस तरह से है, मुझे लगता है कि यह कार्यान्वयन के साथ एक समस्या है। कोई अन्य परिभाषा जो मैंने देखी है (यानी आईएसओ, यूनिकोड TR35) इस तरह से सप्ताह-दर-साल की गणना को परिभाषित करता है। एपीआई में टिप्पणी यह ​​भी संकेत नहीं देती है कि यह क्या चल रहा है, हालांकि अब मैं नोटिस करता हूं कि परीक्षण लिखे गए हैं जो यह तर्क मानते हैं, उदाहरण के लिए, मैं इस तरह से लाइनें देखता हूं:

dow : 1, // Monday is the first day of the week.
doy : 7  // The week that contains Jan 1st is the first week of the year.

और दूसरी फाइल में:

dow : 6, // Saturday is the first day of the week.
doy : 12  // The week that contains Jan 1st is the first week of the year.

इसलिए आपके कार्यान्वयन का आकलन सटीक लगता है। फिर भी, यह सिर्फ icky लगता है, जैसे कि परीक्षण टूटे हुए कार्यान्वयन से मेल करने के लिए लिखे गए थे।

यह विशेष रूप से निराशाजनक है क्योंकि एक क्लीनर चीज को लागू करने को ठीक करना होता है ताकि यह सहज हो जाए (" janX " जो पहले सप्ताह में होना चाहिए), लेकिन इसे अब ठीक करना होगा ' t पीछे की ओर संगत होना। ऊग।

एक विकल्प के लिए doy घटाया जाएगा और सप्ताह कॉन्फ़िगरेशन के लिए एक नया विकल्प पेश किया जाएगा, जैसे minDays या dom ," जनवरी दिनों "की न्यूनतम संख्या निर्दिष्ट करने के लिए (1-) 7) जो वर्ष के पहले सप्ताह में होना चाहिए। यदि यह गलती से निर्दिष्ट किया गया था, तो यह doy ओवरराइड करेगा।

कोई विचार?

खैर जहां तक ​​मैं बता सकता हूं कि हमारे पास आईएसओ सप्ताह के लिए निर्धारित कोड था, तो हमने इस तथ्य का दुरुपयोग किया और सुनिश्चित किया कि संख्याओं ने इसे काम किया है।

यदि हम उपयोगकर्ताओं के लिए अर्थपूर्ण होने के लिए शब्दार्थ को बदलते हैं तो यह बेहतर हो सकता है। लेकिन यह पीछे की ओर संगत होना चाहिए (इसलिए नए तरीके नई संख्याओं को उजागर करते हैं)।

अपने उदाहरण के रूप में, आप इसे काम कर सकते हैं यदि आप doy में कुछ समय 7 जोड़ते हैं, क्योंकि इसके डॉव के सापेक्ष।

# 2336 के पक्ष में इसे बंद करना

हैलो @ichernev। :) एक साल बाद यह वापस आ रहा है, मैं अभी भी अधिक अर्थपूर्ण अर्थविज्ञान को लागू करने के पक्ष में हूं, हालांकि मैं लगभग निश्चित हूं कि वाक्यविन्यास को बदले बिना कुछ पीछे संगत करना संभव नहीं है।

आप इसे काम कर सकते हैं यदि आप doy के लिए 7 बार जोड़ते हैं, क्योंकि इसके डॉव के सापेक्ष।

मुझे यकीन नहीं है कि यह हमेशा ऐसा ही होता है .. उदाहरण के लिए, प्रस्तावित अर्थ परिवर्तन से पहले और बाद में { dow: 0, doy: 6 } का मतलब यह नहीं होगा। (यही कारण है कि मैं एक और नाम के पक्ष में doy का विवरण देना चाहूंगा।)

मुझे इस पर अधिक प्रतिक्रिया के लिए कहां खोजना चाहिए? यह विशेष मुद्दा बंद है, हालांकि मैं बातचीत को क्षण / क्षणों में स्थानांतरित कर सकता हूं। # 279 या अधिक उपयुक्त होने पर एक नया मुद्दा खोलें।

मैं इसे भी टक्कर देना चाहूंगा, क्योंकि मैंने एक अतिरिक्त दिन बिताते हुए यह पता लगाने की कोशिश की थी कि doy काम करता है और इसे करने के लिए क्षण का स्रोत डाउनलोड करना होगा। जैसा कि @usmonster से पता चलता है, एक नया, अधिक प्रासंगिक प्रासंगिक सेटिंग चर पेश करना बहुत अच्छा होगा।

क्या यह पृष्ठ उपयोगी था?
0 / 5 - 0 रेटिंग्स