[R-SIG-Finance] Relative Date Question

Andrew Piskorski atp at piskorski.com
Thu Aug 28 16:24:10 CEST 2008

On Thu, Aug 28, 2008 at 11:14:58AM +0200, Ruvashen Padayachee wrote:
> Hi there. I have a quick query. What is the best way in R to find out a
> date relative to another date? 
> For example, how can I find the date one month after "2008/09/30" ? 

One way is to simply fork off a small Tcl script, as Tcl's 'clock'
command includes pretty good support for relative date calculations,
getting the last day of the month, etc.  E.g.:

  my.next.month <- function(month) {
     # Given a single date anywhere in a month, get the next month date.
     # We assume here that 'month' is a string in YYYY-MM-DD format.
     tcl.code <-
        paste('set month_d [clock scan {'  ,month  ,'}]'
              ,'\n'  ,'puts [clock format [clock scan {+ 1 month} -base $month_d] -format {%Y-%m-%d}]'
     system("tclsh" ,input=tcl.code ,intern=T)

  > my.next.month("2008-09-30")
  [1] "2008-10-30"
  > my.next.month("2008-01-29")
  [1] "2008-02-29"
  > my.next.month("2007-01-29")
  [1] "2007-02-28"

Instead of forking a script with system(), you could also probably use
.Tcl(), which gives you a single persistent in-processs Tcl
interpreter, and would presumably be more efficient.  E.g.:

  > capabilities("tcltk")
  > require(tcltk)
  Loading required package: tcltk
  Loading Tcl/Tk interface ... done
  > .Tcl("set x 1") ; .Tcl("incr x") ; .Tcl("incr x")
  <Tcl> 1
  <Tcl> 2
  <Tcl> 3

Andrew Piskorski <atp at piskorski.com>

More information about the R-SIG-Finance mailing list