Camilo Mora
2015-Jan-24 05:21 UTC
[R] Operations with dates just as Month and Day and not Year
Hi everyone,
I am trying to calculate the number of days between any two dates in a year
regardless of the year. Specifically, image two dates:
MonDay1 <- "01-30" #January 30
MonDay2 <- "12-31" #December 31
I want the difference of those two dates to be
MonDay1- MonDay2=30 days #January is closer to December from the prior year
than to the December in the year when January is.
FYI. this calculation is to count the number of days between any given date to
the peak of the summer, which in the southern hemisphere can be around December.
Unfortunately, I have not been able to make R recognize a date as just Mon-Day.
If I try:
MonDay1<-as.Date("01-30",format="%m-%d") # this
automatically assigns the current year
[1] "2015-01-30"
This following code allows to define just Mon-Day but it is recognized as
character:
format(strptime("07-30", format="%j"),
format="%m-%d")
Any help will be greatly appreciated,
Thanks,
Camilo
Jim Lemon
2015-Jan-24 10:12 UTC
[R] Operations with dates just as Month and Day and not Year
Hi Camilo,
If I understand the above, you want to find the minimum number of days
between two day-month dates when there is no information about the
year. I think if you take the difference of the two dates with the
same year and the difference of the dates after subtracting a year
from the "latest" date, the minimum of the two will be the answer you
want.
get_min_date_diff<-function(date1,date2) {
d1<-as.Date(date1,"%m-%d")
d2<-as.Date(date2,"%m-%d")
if(d2 > d1) {
d3<-
as.Date(paste(date2,as.numeric(format(d2,"%Y"))-1,sep="-"),"%m-%d-%Y")
dd1<-d2 - d1
dd2<-d1 - d3
}
else {
d3<-
as.Date(paste(date1,as.numeric(format(d1,"%Y"))-1,sep="-"),"%m-%d-%Y")
dd1<-d1 - d2
dd2<-d2 - d3
}
return(min(c(dd1,dd2)))
}
Kind of complicated, and assumes the "%m-%d" format, but it may be
what you want.
Jim
On Sat, Jan 24, 2015 at 4:21 PM, Camilo Mora <cmora at dal.ca>
wrote:> Hi everyone,
>
> I am trying to calculate the number of days between any two dates in a year
regardless of the year. Specifically, image two dates:
> MonDay1 <- "01-30" #January 30
> MonDay2 <- "12-31" #December 31
>
> I want the difference of those two dates to be
> MonDay1- MonDay2=30 days #January is closer to December from the prior
year than to the December in the year when January is.
>
> FYI. this calculation is to count the number of days between any given date
to the peak of the summer, which in the southern hemisphere can be around
December.
>
> Unfortunately, I have not been able to make R recognize a date as just
Mon-Day. If I try:
> MonDay1<-as.Date("01-30",format="%m-%d") # this
automatically assigns the current year
> [1] "2015-01-30"
>
> This following code allows to define just Mon-Day but it is recognized as
character:
> format(strptime("07-30", format="%j"),
format="%m-%d")
>
> Any help will be greatly appreciated,
>
> Thanks,
>
> Camilo
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.