चूंकि आप इनपुट इंटरफ़ेस के नियंत्रण में हैं, सामान्यता के नुकसान के बिना हम मान सकते हैं कि अलग वर्ष/महीना/दिन होगा पूर्णांक (पूर्णांक होने के लिए ठीक से सत्यापित करें :)। मान लीजिए कि बीसी इंगित करने के लिए वर्ष नकारात्मक होगा।
तो सबसे पहले ... स्पष्ट (आंशिक) उत्तर: checkdate()। फ़ंक्शन प्रलेखन के अनुसार यह वर्षों> = 1 के लिए ठीक है।
आप 'इसलिए अगर साल < = 0.
के एक side-trek यहाँ बनाने के लिए और क्यों है कि एक बड़ा समस्या हो सकती है चलो क्या करना है की समस्या से अटक फिर ...
के अनुसार ऊपर विकिपीडिया लिंक, जूलियन कैलेंडर 45 ईसा पूर्व में प्रभावी हुआ। यह कैलेंडर, सभी व्यावहारिक उद्देश्यों के लिए, ग्रेगोरियन कैलेंडर के समान है जिसे हम आज उपयोग करते हैं। अंतर यह है कि उनके बीच दस दिन का ऑफसेट होता है; जूलियन कैलेंडर का अंतिम दिन गुरुवार, 4 अक्टूबर 1582 था और इसके बाद ग्रेगोरियन कैलेंडर के पहले दिन, शुक्रवार, 15 अक्टूबर 1582 (सप्ताहांत का चक्र प्रभावित नहीं हुआ) था।
इसका पहले से ही मतलब है कि 5 अक्टूबर 1582 से 14 अक्टूबर 1582 (समावेशी) की सीमाएं हैं, यदि आप ग्रेगोरियन कैलेंडर का पालन कर रहे हैं; वे कभी अस्तित्व में नहीं हैं।
वहां से पीछे जाकर, आप 45 ईसा पूर्व तक अच्छे हैं। 46 ईसा पूर्व से, जूलियन के बजाय Roman calendar का उपयोग किया गया था।
मैं यहां उस गड़बड़ी में नहीं जा रहा हूं, लेकिन बस उल्लेख करें कि चूंकि यह कैलेंडर ग्रेगोरियन से काफी अलग था, इसलिए आपके उपयोगकर्ता "रोमन कैलेंडर दिनांक इनपुट फॉर्म" देखने के लिए तैयार नहीं होंगे। मेरा सुझाव है, तकनीकी रूप से सही से अपने ऐप को बेहतर बनाने के लिए बेहतर है।
यदि यह माना जा सकता है कि किसी भी व्यक्ति को उनके दिमाग में वास्तव में बीसी तिथि नहीं पता है, या पता है कि इसे ठीक से कैसे निर्दिष्ट किया जाए, तो भी आप यह मान सकते हैं कि सभी तिथियां बीसी फॉर्म 1 के हैं /1 साल। इसलिए आपका इंटरफ़ेस महीने/दिन नियंत्रण अक्षम कर सकता है यदि कोई "बीसी" चेकबॉक्स चेक किया गया था, तो बीसी और एडी के लिए अलग-अलग समूह बॉक्स, या उपयुक्त कुछ भी हो।
इस सब के बाद एकमात्र शेष समस्या, जैसा कि मैंने इसे देखा, लीप वर्षों की तारीखों की जांच कर रहा है। वे introduced with the Julian calendar, but not actually implemented correctly until 8 AD थे।
दस्तावेजों के ऊपर अंतिम लिंक 45 ईसा पूर्व - 4 एडी (समावेशी) लीप वर्षों के दौरान सही ढंग से गणना नहीं की गई थी। एक समारोह है कि कि विसंगति के लिए खातों साल की छलांग है, प्लस जूलियन/ग्रेगोरियन स्विच होगा:
define('YEAR_JULIAN_CALENDAR_INTRODUCED', -45);
define('YEAR_JULIAN_CALENDAR_LEAP_IMPLEMENTED_CORRECTLY', 8);
define('YEAR_GREGORIAN_CALENDAR_INTRODUCED', 1582);
function is_leap_year($year) {
if($year < YEAR_JULIAN_CALENDAR_INTRODUCED) {
return false; // or good luck :)
}
if($year < YEAR_JULIAN_CALENDAR_LEAP_IMPLEMENTED_CORRECTLY) {
return $year <= -9 && $year % 3 == 0;
}
if($year < YEAR_GREGORIAN_CALENDAR_INTRODUCED) {
return $year % 4 == 0;
}
// Otherwise, Gregorian is in effect
return $year % 4 == 0 && ($year % 100 != 0 || $year % 400 == 0);
}
इस के साथ सशस्त्र, आप तो एक समारोह है कि सही ढंग से आपको बताता है कि कितने दिनों वहाँ प्रत्येक में हैं लिख सकता है साल। उस समय तिथि घटाव/अतिरिक्त बनाया जा सकता है।
यह सब चर्चा के बाद (मैं किसी को जो इतनी दूर :) मैं पूछने के लिए पढ़ा है की हिम्मत की प्रशंसा करते हैं:
सटीकता कितना आप वास्तव में जरूरत है?
आप तय करते हैं कि आप "तकनीकी जानकारी" के बारे में गुदा होने की जरूरत है, मैं व्यक्तिगत रूप से काम करता है जैसा कि ऊपर उल्लेख लागू होगा, और फिर यदि: क) मेरी दस्तकारी तारीख पुस्तकालय के रूप में उनका उपयोग करें या ख) की जांच करने के लिए उनका उपयोग करें कि में दिलचस्पी रखने वाली कोई भी 3-पार्टी पार्टी लाइब्रेरी वास्तव में सही ढंग से लागू की गई है।
यदि आपको ऐसा करने की आवश्यकता नहीं है, तो बस दिखाएं कि आप इसे कभी नहीं पढ़ते हैं। :)
दिनांक इनपुट प्रारूप क्या होगा? जवाब उस पर निर्भर करेगा। :) – Jon
मैं सुझावों के लिए खुला हूं। मुझे यकीन नहीं है कि मेरे पास "बीसी/एडीडी" के अतिरिक्त अतिरिक्त ड्रॉप-डाउन की श्रृंखला होगी। या एक साधारण टेक्स्टबॉक्स। – Sampson
नीचे मेरा लंबा जवाब देखें; संक्षेप में, बीसी/एडी ध्वनि के लिए रेडियो बटन मेरे लिए सबसे उपयुक्त हैं। – Jon