यह फिलिप लेबेर्ट के उत्तर के उत्तर पर आधारित है, लेकिन एक अतिरिक्त एज केस को संभालता है जिसे मैंने पिछले किसी भी उत्तर में नहीं देखा है।
किनारे का मामला मैं संबोधित कर रहा हूं, जब जन्मदिन लीप पर होता है, जन्मदिन वर्तमान वर्ष के लिए अतीत में होता है, और चालू वर्ष एक लीप वर्ष नहीं है लेकिन अगले वर्ष है।
प्रदान किया गया वर्तमान उत्तर एक कम दिन के परिणामस्वरूप होगा क्योंकि यह चालू वर्ष के 28 फरवरी को "अगला" सेट करेगा और फिर एक वर्ष में 28 वर्ष की तारीख को एक लीप वर्ष (जो सही नहीं है) को जोड़ता है। एक लाइन बदलना इस किनारे के मामले को संभालता है।
DateTime today = DateTime.Today;
DateTime next = birthday.AddYears(today.Year - birthday.Year);
if (next < today)
{
if (!DateTime.IsLeapYear(next.Year + 1))
next = next.AddYears(1);
else
next = new DateTime(next.Year + 1, birthday.Month, birthday.Day);
}
int numDays = (next - today).Days;
अद्यतन: प्रति फिलिप के संपादन के अनुसार संपादित किया गया कि मेरे कोड में एक बड़ा दोष था।
स्रोत
2014-05-06 18:25:08
निश्चित रूप से एक डुप्ली? ... –
@ मिच - ऐसा लगता है लेकिन पूर्ण पाठ खोज को कुछ सेकंड में डुप्ली नहीं मिला, इसलिए मैंने सोचा कि मैं इस सवाल को एक स्पष्ट तरीके से लिखूंगा ... –
http://stackoverflow.com/ प्रश्न/9/कैसे करें-मैं-गणना-कुछ-उम्र-इन-सी –