Simplify MonthFromTime().
Now that the function has full test coverage, refactor it.
Change-Id: Ia881ee31f884399763ea2db5fb1249917ce23d67
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/61370
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/fx_date_helpers.cpp b/fxjs/fx_date_helpers.cpp
index f95758e..1a78106 100644
--- a/fxjs/fx_date_helpers.cpp
+++ b/fxjs/fx_date_helpers.cpp
@@ -100,32 +100,23 @@
}
int MonthFromTime(double t) {
+ // Check for negative |day| values and check for January.
int day = DayWithinYear(t);
- int year = YearFromTime(t);
- if (0 <= day && day < 31)
+ if (day < 0)
+ return -1;
+ if (day < 31)
return 0;
- if (31 <= day && day < 59 + IsLeapYear(year))
- return 1;
- if ((59 + IsLeapYear(year)) <= day && day < (90 + IsLeapYear(year)))
- return 2;
- if ((90 + IsLeapYear(year)) <= day && day < (120 + IsLeapYear(year)))
- return 3;
- if ((120 + IsLeapYear(year)) <= day && day < (151 + IsLeapYear(year)))
- return 4;
- if ((151 + IsLeapYear(year)) <= day && day < (181 + IsLeapYear(year)))
- return 5;
- if ((181 + IsLeapYear(year)) <= day && day < (212 + IsLeapYear(year)))
- return 6;
- if ((212 + IsLeapYear(year)) <= day && day < (243 + IsLeapYear(year)))
- return 7;
- if ((243 + IsLeapYear(year)) <= day && day < (273 + IsLeapYear(year)))
- return 8;
- if ((273 + IsLeapYear(year)) <= day && day < (304 + IsLeapYear(year)))
- return 9;
- if ((304 + IsLeapYear(year)) <= day && day < (334 + IsLeapYear(year)))
- return 10;
- if ((334 + IsLeapYear(year)) <= day && day < (365 + IsLeapYear(year)))
- return 11;
+
+ if (IsLeapYear(YearFromTime(t)))
+ --day;
+
+ // Check for February onwards.
+ static constexpr int kCumulativeDaysInMonths[] = {
+ 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
+ for (size_t i = 0; i < FX_ArraySize(kCumulativeDaysInMonths); ++i) {
+ if (day < kCumulativeDaysInMonths[i])
+ return i + 1;
+ }
return -1;
}