I have a given date, such as 2013-10-31 and I need to accurately determine the next day (taking into account DST, leap years, leap minutes, timezones, etc). I have no way of knowing whether the date is at the end of a month/year/etc, and I sincerely hope not having to care about that.

In Linux, I simply type:

day_after=`date -ud"$date1 1 days" +%Y-%m-%d`

echo "$day_after" => 2013-11-01

However, when I try the same in Darwin/BSD:

day_after=`date -v1d -ujf"%Y-%m-%d" $date1 +%Y-%m-%d`

echo "$day_after" => 2013-10-01

How can I get BSD to do proper date calculations?

1 Answer 1


You must specify + in your date adjustment or BSD assumes that you are giving it an actual day of the month to use.

day_after=`date -v+1d -ujf"%Y-%m-%d" $date1 +%Y-%m-%d`

echo "$day_after" => 2013-11-01

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .