diff --git a/date.c b/date.c index 633d1176fe..1e9cfe4b6f 100644 --- a/date.c +++ b/date.c @@ -1132,7 +1132,11 @@ static void date_yesterday(struct tm *tm, struct tm *now, int *num) static void date_time(struct tm *tm, struct tm *now, int hour) { - if (tm->tm_hour < hour) + /* + * If we do not yet have a specified day, we'll use the most recent + * version of "hour" relative to now. But that may be yesterday. + */ + if (tm->tm_mday < 0 && tm->tm_hour < hour) update_tm(tm, now, 24*60*60); tm->tm_hour = hour; tm->tm_min = 0; diff --git a/t/t0006-date.sh b/t/t0006-date.sh index b9bb7a05d9..62cbada774 100755 --- a/t/t0006-date.sh +++ b/t/t0006-date.sh @@ -209,8 +209,12 @@ check_approxidate '6pm yesterday' '2009-08-29 18:00:00' check_approxidate '3:00' '2009-08-30 03:00:00' check_approxidate '15:00' '2009-08-30 15:00:00' check_approxidate 'noon today' '2009-08-30 12:00:00' +check_approxidate 'today at noon' '2009-08-30 12:00:00' '-12 hours' check_approxidate 'noon yesterday' '2009-08-29 12:00:00' +check_approxidate 'last Friday at noon' '2009-08-28 12:00:00' +check_approxidate 'last Friday at noon' '2009-08-28 12:00:00' '-12 hours' check_approxidate 'January 5th noon pm' '2009-01-05 12:00:00' +check_approxidate 'January 5th noon pm' '2009-01-05 12:00:00' '-12 hours' check_approxidate 'January 5th today pm' '2009-01-30 12:00:00' check_approxidate '10am noon' '2009-08-29 12:00:00' check_approxidate 'January 5th yesterday' '2009-01-29 19:20:00'