daysBetween.R

nate — Jun 7, 2014, 4:24 PM

# assume day2 is later than day1
daysBetween <- function(date1, date2) {
  # the number of days in January is 31, February is 28, etc
  days_per_month = c(31,28,31,30,31,30,31,31,30,31,30,31)

  # between 1 and 12
  month1 = floor(date1)
  month2 = floor(date2)

  # between 1 and 31
  days1 = (date1 - month1)*100
  days2 = (date2 - month2)*100

  if( (month2-month1) == 0) {
    return(days2-days1)
  }

  total = days_per_month[month1] - days1
  #cat("total is ", total, "\n")

  i=(month1+1)
  while(i<month2) {
    total = total + days_per_month[i]
    #cat("total is ", total, "\n")
    i=i+1
  }

  total = total + days2
  return(total)
}
# January 1st, February 28th, June 30th, October 15th, October 31st, December 31st
date1 = 1.01
date2 = 2.28

#ans = daysBetween(date1,date2)
#print(ans)

dates = c(1.01,2.28,6.30,10.15,10.31,12.31)
for(i in 1:(length(dates)-1)) {
  cat("i is:", i, "\n")
  cat("  dates[i] is:", dates[i], "dates[i+1] is:", dates[i+1], "\n")
  cat("  days between is:", daysBetween(dates[i], dates[i+1]),"\n")
}
i is: 1 
  dates[i] is: 1.01 dates[i+1] is: 2.28 
  days between is: 58 
i is: 2 
  dates[i] is: 2.28 dates[i+1] is: 6.3 
  days between is: 122 
i is: 3 
  dates[i] is: 6.3 dates[i+1] is: 10.15 
  days between is: 107 
i is: 4 
  dates[i] is: 10.15 dates[i+1] is: 10.31 
  days between is: 16 
i is: 5 
  dates[i] is: 10.31 dates[i+1] is: 12.31 
  days between is: 61