Skip to content

Commit 0cd54ec

Browse files
authored
Merge pull request #56 from anilanar/fix-diff-adjust
make diff/adjust produce correct values involving years 0-100
2 parents 97c9c81 + ca57304 commit 0cd54ec

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

src/Data/DateTime.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
"use strict";
22

3+
var createUTC = function (y, mo, d, h, m, s, ms) {
4+
var date = new Date(Date.UTC(y, mo, d, h, m, s, ms));
5+
if (y >= 0 && y < 100) {
6+
date.setUTCFullYear(y);
7+
}
8+
return date.getTime();
9+
};
10+
311
exports.calcDiff = function (rec1, rec2) {
4-
var msUTC1 = Date.UTC(rec1.year, rec1.month - 1, rec1.day, rec1.hour, rec1.minute, rec1.second, rec1.millisecond);
5-
var msUTC2 = Date.UTC(rec2.year, rec2.month - 1, rec2.day, rec2.hour, rec2.minute, rec2.second, rec2.millisecond);
12+
var msUTC1 = createUTC(rec1.year, rec1.month - 1, rec1.day, rec1.hour, rec1.minute, rec1.second, rec1.millisecond);
13+
var msUTC2 = createUTC(rec2.year, rec2.month - 1, rec2.day, rec2.hour, rec2.minute, rec2.second, rec2.millisecond);
614
return msUTC1 - msUTC2;
715
};
816

917
exports.adjustImpl = function (just) {
1018
return function (nothing) {
1119
return function (offset) {
1220
return function (rec) {
13-
var msUTC = Date.UTC(rec.year, rec.month - 1, rec.day, rec.hour, rec.minute, rec.second, rec.millisecond);
21+
var msUTC = createUTC(rec.year, rec.month - 1, rec.day, rec.hour, rec.minute, rec.second, rec.millisecond);
1422
var dt = new Date(msUTC + offset);
1523
return isNaN(dt.getTime()) ? nothing : just({
1624
year: dt.getUTCFullYear(),

test/Test/Main.purs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ import Data.Maybe (Maybe(..), fromJust)
1818
import Data.String (length)
1919
import Data.Traversable (sequence, traverse)
2020
import Data.Tuple (Tuple(..), snd)
21-
import Data.Newtype (unwrap)
21+
import Data.Newtype (over, unwrap)
22+
23+
import Math (floor)
2224

2325
import Type.Proxy (Proxy(..))
2426
import Test.Assert (ASSERT, assert)
@@ -130,6 +132,9 @@ main = do
130132

131133
log "Check that adjust behaves as expected"
132134
assert $ DateTime.adjust (Duration.fromDuration (Duration.Days 31.0) + Duration.fromDuration (Duration.Minutes 40.0)) dt1 == Just dt4
135+
assert $ (Date.year <<< DateTime.date <$>
136+
(DateTime.adjust (Duration.Days 735963.0) epochDateTime))
137+
== toEnum 2016
133138

134139
log "Check that diff behaves as expected"
135140
assert $ DateTime.diff dt2 dt1 == Duration.Minutes 40.0
@@ -138,6 +143,8 @@ main = do
138143
assert $ DateTime.diff dt5 dt3 == Duration.Days 29.0
139144
assert $ DateTime.diff dt1 dt3 == Duration.Days (-31.0)
140145
assert $ DateTime.diff dt4 dt1 == Duration.fromDuration (Duration.Days 31.0) + Duration.fromDuration (Duration.Minutes 40.0)
146+
assert $ over Duration.Days floor (DateTime.diff dt1 epochDateTime)
147+
== Duration.Days 735963.0
141148

142149
-- instant -----------------------------------------------------------------
143150

0 commit comments

Comments
 (0)