diff --git a/fxjs/BUILD.gn b/fxjs/BUILD.gn
index 0f51f9c..c36ab4e 100644
--- a/fxjs/BUILD.gn
+++ b/fxjs/BUILD.gn
@@ -226,6 +226,7 @@
       "cfxjs_engine_unittest.cpp",
       "cjs_publicmethods_unittest.cpp",
       "cjs_util_unittest.cpp",
+      "fx_date_helpers_unittest.cpp",
     ]
     configs = [ "//v8:external_startup_data" ]
     deps = [
diff --git a/fxjs/fx_date_helpers_unittest.cpp b/fxjs/fx_date_helpers_unittest.cpp
new file mode 100644
index 0000000..fb756b9
--- /dev/null
+++ b/fxjs/fx_date_helpers_unittest.cpp
@@ -0,0 +1,108 @@
+// Copyright 2019 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "fxjs/fx_date_helpers.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+constexpr double kMilliSecondsInADay = 1000 * 60 * 60 * 24;
+
+}  // namespace
+
+TEST(FX_DateHelper, GetYearFromTime) {
+  static constexpr struct {
+    double time_ms;
+    int expected_year;
+  } kTests[] = {
+      {-400 * kMilliSecondsInADay, 1968},
+      {-1, 1969},
+      {0, 1970},
+      {1, 1970},
+      {364.9 * kMilliSecondsInADay, 1970},
+      {365.0 * kMilliSecondsInADay, 1971},
+      {365.1 * kMilliSecondsInADay, 1971},
+      {2 * 365.0 * kMilliSecondsInADay, 1972},
+      // 1972 is a leap year, so there should be an extra day.
+      {3 * 365.0 * kMilliSecondsInADay, 1972},
+      {(3 * 365.0 + 1) * kMilliSecondsInADay, 1973},
+  };
+
+  for (const auto& test : kTests) {
+    EXPECT_EQ(test.expected_year, FX_GetYearFromTime(test.time_ms))
+        << test.time_ms;
+  }
+}
+
+TEST(FX_DateHelper, GetMonthFromTime) {
+  static constexpr struct {
+    double time_ms;
+    int expected_month;  // Zero-based.
+  } kTests[] = {
+      {-400 * kMilliSecondsInADay, 10},
+      {-1, 11},
+      {0, 0},
+      {1, 0},
+      {364.9 * kMilliSecondsInADay, 11},
+      {365.0 * kMilliSecondsInADay, 0},
+      {365.1 * kMilliSecondsInADay, 0},
+      // 1972 is a leap year, so there should be an extra day.
+      {2 * 365.0 * kMilliSecondsInADay, 0},
+      {3 * 365.0 * kMilliSecondsInADay, 11},
+      {(3 * 365.0 + 1) * kMilliSecondsInADay, 0},
+      // Tests boundaries for all months in 1970 not already covered above.
+      {30 * kMilliSecondsInADay, 0},
+      {31 * kMilliSecondsInADay, 1},
+      {58 * kMilliSecondsInADay, 1},
+      {59 * kMilliSecondsInADay, 2},
+      {89 * kMilliSecondsInADay, 2},
+      {90 * kMilliSecondsInADay, 3},
+      {119 * kMilliSecondsInADay, 3},
+      {120 * kMilliSecondsInADay, 4},
+      {150 * kMilliSecondsInADay, 4},
+      {151 * kMilliSecondsInADay, 5},
+      {180 * kMilliSecondsInADay, 5},
+      {181 * kMilliSecondsInADay, 6},
+      {211 * kMilliSecondsInADay, 6},
+      {212 * kMilliSecondsInADay, 7},
+      {242 * kMilliSecondsInADay, 7},
+      {243 * kMilliSecondsInADay, 8},
+      {272 * kMilliSecondsInADay, 8},
+      {273 * kMilliSecondsInADay, 9},
+      {303 * kMilliSecondsInADay, 9},
+      {304 * kMilliSecondsInADay, 10},
+      {333 * kMilliSecondsInADay, 10},
+      {334 * kMilliSecondsInADay, 11},
+      {364 * kMilliSecondsInADay, 11},
+      // Tests boundaries for all months in 1972 not already covered above.
+      {(2 * 365.0 + 30) * kMilliSecondsInADay, 0},
+      {(2 * 365.0 + 31) * kMilliSecondsInADay, 1},
+      {(2 * 365.0 + 59) * kMilliSecondsInADay, 1},
+      {(2 * 365.0 + 60) * kMilliSecondsInADay, 2},
+      {(2 * 365.0 + 90) * kMilliSecondsInADay, 2},
+      {(2 * 365.0 + 91) * kMilliSecondsInADay, 3},
+      {(2 * 365.0 + 120) * kMilliSecondsInADay, 3},
+      {(2 * 365.0 + 121) * kMilliSecondsInADay, 4},
+      {(2 * 365.0 + 151) * kMilliSecondsInADay, 4},
+      {(2 * 365.0 + 152) * kMilliSecondsInADay, 5},
+      {(2 * 365.0 + 181) * kMilliSecondsInADay, 5},
+      {(2 * 365.0 + 182) * kMilliSecondsInADay, 6},
+      {(2 * 365.0 + 212) * kMilliSecondsInADay, 6},
+      {(2 * 365.0 + 213) * kMilliSecondsInADay, 7},
+      {(2 * 365.0 + 243) * kMilliSecondsInADay, 7},
+      {(2 * 365.0 + 244) * kMilliSecondsInADay, 8},
+      {(2 * 365.0 + 273) * kMilliSecondsInADay, 8},
+      {(2 * 365.0 + 274) * kMilliSecondsInADay, 9},
+      {(2 * 365.0 + 304) * kMilliSecondsInADay, 9},
+      {(2 * 365.0 + 305) * kMilliSecondsInADay, 10},
+      {(2 * 365.0 + 334) * kMilliSecondsInADay, 10},
+      {(2 * 365.0 + 335) * kMilliSecondsInADay, 11},
+  };
+
+  for (const auto& test : kTests) {
+    EXPECT_EQ(test.expected_month, FX_GetMonthFromTime(test.time_ms))
+        << test.time_ms;
+  }
+}
