R/elapsedMonths.R

#' @import magrittr
#' @import sqldf
NULL

#' Month difference between two dates
#'
#' Calculating months number between end_date and start_date
#' @param end_date date format
#' @param start_date date format
#' @return months number (integer)
#' @export

elapsedMonths <- function(end_date, start_date) {
  ed <- as.POSIXlt(end_date)
  sd <- as.POSIXlt(start_date)
  12 * (ed$year - sd$year) + (ed$mon - sd$mon)
}


#' Add months to date
#'
#' Calculating months number between $end_date and $start_date
#' @param date date format
#' @param n number of months to add
#' @return date updated date
#' @export
addMonths  <-function(date,n){
  if(length(date) == 1){
    date <- seq(date, by = paste (n, "months"), length = 2)[2]
  } else {
    if(length(n) > 1){
      for(i in 1:length(date))
        date[i] <- seq(date[i], by = paste (n[i], "months"), length = 2)[2]
    } else {
      for(i in 1:length(date))
        date[i] <- seq(date[i], by = paste (n, "months"), length = 2)[2]
    }
  }

  return(date)
}

#' Get last day of the month
#'
#' Get last day of the month
#' @param date date format
#' @return date updated date
#' @export
lastMonthDay  <-function(date){
    for(i in 1:length(date))
      date[i] <- RcppBDT::getEndOfMonth(date[i])

  return(date)
}

#' Get first weekday
#'
#' Get first day of the week
#' @param date date format
#' @return date updated date
#' @export
firstWeekDay  <-function(date){
  for(i in 1:length(date))
    date[i] <-
      gsub("start",date[i],"select date('start', 'weekday 0','-6 days')") %>%
      sqldf() %>% .[1,1]
  return(date)
}


#' Get last weekday
#'
#' Get last day of the week
#' @param date date format
#' @return date updated date
#' @export
lastWeekDay  <-function(date){
  for(i in 1:length(date))
    date[i] <-
      gsub("end",date[i],"select date('end', 'weekday 0')") %>%
      sqldf() %>% .[1,1]
  return(date)
}
elo2zero/oddsandsods documentation built on May 16, 2019, 3:04 a.m.