return (index)
if (inherits(index, "Date") || is.character(index))
{
- tryCatch(dt <- as.POSIXct(index), error=function(e) stop("Unrecognized index format"))
+ tryCatch(indexAsDate <- as.Date(index), error=function(e) stop("Unrecognized index format"))
#TODO: tz arg to difftime ?
- integerIndex <- round( (as.numeric( difftime(dt, data$getTime(1)) ))[1] ) + 1
- if (integerIndex > 0 && integerIndex <= data$getSize())
+ integerIndex <- round( as.numeric(
+ difftime(indexAsDate, as.Date(data$getTime(1)[1])) ) ) + 1
+ if (integerIndex >= 1 && integerIndex <= data$getSize())
{
- #WARNING: if series start at date >0h, result must be shifted
- date1 = as.POSIXlt(data$getTime(1)[1])
- date2 = as.POSIXlt(data$getTime(2)[1])
- shift = (date1$year==date2$year && date1$mon==date2$mon && date1$mday==date2$mday)
- return (integerIndex + ifelse(shift,1,0))
+ #WARNING: if index>=2 && series start at date >0h, result must be shifted
+ #Convention: if first date asked, return first matching index (i.e.: 1)
+ shift = 0
+ if (integerIndex >= 2)
+ {
+ date1 = as.POSIXlt(data$getTime(1)[1])
+ date2 = as.POSIXlt(data$getTime(2)[1])
+ shift = (date1$year==date2$year && date1$mon==date2$mon && date1$mday==date2$mday)
+ }
+ return (integerIndex + shift)
}
stop("Date outside data range")
}