|
@@ -4750,15 +4750,24 @@ parse_date_string(const char *datetime)
|
|
|
alt_result = mktime(&tm);
|
|
|
if (alt_result > 0) {
|
|
|
struct tm *lt = gmtime(&alt_result);
|
|
|
+ signed int delta_mon =
|
|
|
+ (lt->tm_mon - tm.tm_mon) + 12 * (lt->tm_year - tm.tm_year);
|
|
|
time_t delta;
|
|
|
- if (lt->tm_mday == tm.tm_mday) {
|
|
|
+
|
|
|
+ if (delta_mon != 0) {
|
|
|
+ /* No need to consider different length of months */
|
|
|
delta = (lt->tm_sec - tm.tm_sec)
|
|
|
+ 60 * (lt->tm_min - tm.tm_min)
|
|
|
- + 60 * 60 * (lt->tm_hour - tm.tm_hour);
|
|
|
+ + 60 * 60 * (lt->tm_hour - tm.tm_hour)
|
|
|
+ + 24 * 60 * 60 * (lt->tm_mday - tm.tm_mday);
|
|
|
} else {
|
|
|
- /* TODO */
|
|
|
- delta = 0;
|
|
|
+ /* Get clock time and add or subtract a day */
|
|
|
+ delta = (lt->tm_sec - tm.tm_sec)
|
|
|
+ + 60 * (lt->tm_min - tm.tm_min)
|
|
|
+ + 60 * 60 * (lt->tm_hour - tm.tm_hour)
|
|
|
+ + (delta_mon * 24 * 60 * 60);
|
|
|
}
|
|
|
+
|
|
|
alt_result -= delta;
|
|
|
}
|
|
|
|