2012-09-18 13 views
5

मैं दो तारीखों के बीच पूर्ण दिनों की संख्या की गणना से 2 9 फरवरी को बाहर करना चाहता हूं। अंतराल के कोने मूल्यों को छोड़कर।समय अंतराल से 2 9 फरवरी को छोड़ दें

टेस्ट परिदृश्यों:

1 March 2012 - 28th February 2012 = should give 0 days. 
1 March 2012 - 26th February 2012 = should give 2 days. 
1 March 2013 - 28th February 2012 = should give 365 days and not 366 days. 
1 March 2017 - 28th February 2012 = should give 365*5 =1825 days and not 1827 days. 

वर्तमान में मैं साल पार्स और अगर वहाँ तिथियों के बीच किसी भी लीप वर्ष है की जाँच करें और उसके बाद जाँच लें कि अंतराल 29 वें फरवरी है। क्या यह पता लगाने का कोई तरीका है कि क्या किसी विशेष अंतराल का कोई विशेष दिन होता है और अंतराल वर्षों में फैलता है तो घटनाओं की संख्या होती है।

+1

ब्याज से, आप 2 9 फरवरी को क्यों बाहर करना चाहते हैं? –

+2

@ पीटर-लॉरी मैं बीमा कंपनी के लिए कोड लिख रहा हूं और उनके पास पॉलिसी आत्मसमर्पण या प्रमोटेड होने पर 29 फरवरी के लिए प्रीमियम चार्ज करने की नीति नहीं है। – Hulk

उत्तर

1

लेकिन यह 2 9वीं की वजह से नहीं है, यह सही है।

यदि आप 1 मार्च 2012 और 28 फरवरी 2012 की तुलना करते हैं तो 1 दिन वापस आ जाएगा, और 2 9वीं 2 दिनों के साथ वापस आ जाएगा। इन दो तिथियों के बीच का अंतर एक दिन है।

0 दिन वापस जाने के लिए कैसे आप आप दो समान दिनांक की तुलना करनी चाहिए चाहते हैं, 1 मार्च 2012 और 1 की तरह मार्च 2012

मुझे लगता है कि आपको लगता है कि ^^ भूल कर रहे हैं।

+0

मैं सिरों को छोड़कर दो तिथियों के बीच पूर्ण दिनों की बात कर रहा हूं। मैं अधिक स्पष्टता के लिए सवाल अपडेट करूंगा। – Hulk

+0

हम, मुझे नहीं पता कि यह संभव है, लेकिन यदि आप दो तिथियों की तुलना करने के लिए वर्ष 1 9 00 में बदलते हैं तो उदाहरण के लिए? – Cechinel

0

मैंने 360 दिन के वर्षों के बारे में सुना है, लेकिन यह पहली बार है जब मुझे 365 दिन का सामना करना पड़ा।

आपकी सबसे अच्छी शर्त दिन में आपकी तिथियों के बीच अंतर की गणना करना है, और 2 9 फरवरी के सभी को घटाएं।

जिसका अर्थ है कि आपको एक दिनचर्या की आवश्यकता है जो आपकी तिथियों की सीमा से गुज़र जाएगी और 2 9 फरवरी की संख्या की गणना करेगा।

मैं कैसे JodaTime में यह करने के लिए पता नहीं है, लेकिन बुनियादी एल्गोरिथ्म होगा

  • 1 के बाद से दिनों की संख्या में कनवर्ट शूरुवाती तारीक जनवरी 1970
  • समाप्ति तिथि को कन्वर्ट 1 जनवरी 1 9 70 से दिनों की संख्या।
  • एक दिन में एक दिन से शुरुआती दिन से एक दिन लूप।
  • लूप दिन को एक तारीख में कनवर्ट करें।
  • यदि दिनांक 2 9 फरवरी है, तो प्रति काउंटर
  • लूप को खत्म करने के बाद, काउंटर वापस करें।
0

का उपयोग जावास्क्रिप्ट आप इसे प्राप्त कर सकते हैं, के रूप में इस प्रकार है जहां startDate और endDate जावास्क्रिप्ट Date वस्तुओं रहे हैं।

function calculateDays(startDate,endDate){ 
    var oneDay = 86400000; //ms per day 
    var difference = Math.ceil((endDate.getTime() - startDate.getTime())/oneDay); 
    var totFeb29s = findTotalFeb29s(startDate,endDate); 
    return parseInt(difference)+parseInt(1)-parseInt(totFeb29s);  
}  
function findTotalFeb29s(startDate,endDate){ 
    var totalFeb29s = 0; 
    var startYear = startDate.getFullYear(); 
    var endYear = endDate.getFullYear(); 
    for(var year=startYear;year<=endYear;year++){ 
     var dt = new Date(year, 1, 29); 
     var isLeap = dt.getMonth() == 1; 
     if(isLeap==true && startDate<=dt && dt<=endDate){ 
      totalFeb29s = parseInt(totalFeb29s)+parseInt(1); 
     } 
    } 
    return totalFeb29s; 
}  
+0

आप जावास्क्रिप्ट उत्तर क्यों दे रहे हैं?सवाल इस के लिए नहीं पूछता है। –

1

निम्नलिखित जावा-एस्क्यू छद्म कोड को काम करना चाहिए। यदि आप चाहें तो यह आपको अन्य फ़िल्टर जोड़ने की भी अनुमति देगा:

int daysExcludingLeapYearDay(Date start, Date end) 
{ 
    if(end.isBefore(start)) 
    { 
     return filterOutLeapYearDays(daysBetween(end, start)).size(); 
    } 

    return filterOutLeapYearDays(daysBetween(start, end)).size(); 
} 

List<Date> filterOutLeapYearDays(List<Date> days) 
{ 
    List<Date> daysExcludingLeapYearDays = 
      days 
      .filter(d -> !isFeb29(d)) 
      .toList()); 

    return daysExcludingLeapYearDays; 
} 

List<Date> daysBetween(Date start, Date end) 
{ 
    List<Date> days = new List(); 

    for (Date day = start; day.isBefore(end); day = day.plusOneDay()) 
    { 
     days.add(day); 
    } 

    return days 
} 

boolean isFeb29(Date date) 
{ 
    return date.month == FEBRUARY && date.day == 29; 
} 
संबंधित मुद्दे