Skip to content

Commit

Permalink
Fix bugs related to year and month edges
Browse files Browse the repository at this point in the history
Fixes #1
  • Loading branch information
jzaefferer committed Jan 12, 2017
1 parent 74a5083 commit 521c202
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 17 deletions.
20 changes: 9 additions & 11 deletions src/relative-time.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,15 @@ export default class RelativeTime {
var diff = date.getTime() - now.getTime();
var absDiff = Math.abs(diff);
var round = Math[diff > 0 ? "floor" : "ceil"];
var diffYears = date.getFullYear() - now.getFullYear();
var diffMonths = date.getMonth() - now.getMonth();
var diffDays = date.getDate() - now.getDate();
if (diffYears) {
diffMonths += date > now ? 12 : -12;
}
if (diffMonths) {
diffDays += date > now ? daysInMonth(now) : -daysInMonth(date);
}

// now or x seconds ago.
if (absDiff < minute) {
Expand All @@ -58,7 +67,6 @@ export default class RelativeTime {

// x hours ago or yesterday.
if (absDiff < day) {
let diffDays = date.getDate() - now.getDate();
if (absDiff > _6hours && diffDays) {
return formatters.day(diffDays);
}
Expand All @@ -67,26 +75,16 @@ export default class RelativeTime {

// x days ago or last month
if (absDiff < month) {
let diffMonths = date.getMonth() - now.getMonth();
if (absDiff > _7days && diffMonths) {
return formatters.month(diffMonths);
}
let diffDays = date.getDate() - now.getDate();
if (diffMonths) {
diffDays += date > now ? daysInMonth(now) : -daysInMonth(date);
}
return formatters.day(diffDays);
}

// x months ago or last year or x years ago
var diffYears = date.getFullYear() - now.getFullYear();
if (absDiff > _3months && diffYears) {
return formatters.year(diffYears);
}
var diffMonths = date.getMonth() - now.getMonth();
if (diffYears) {
diffMonths += date > now ? 12 : -12;
}
return formatters.month(diffMonths);
}
}
Expand Down
24 changes: 18 additions & 6 deletions test/relative-time.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,14 @@ describe("relative-time", function() {
sinon.useFakeTimers(new Date("2016-04-10 23:00").getTime());
expect(relativeTime.format(new Date("2016-04-11 05:00"))).to.equal("in 6 hours");
expect(relativeTime.format(new Date("2016-04-11 06:00"))).to.equal("tomorrow");

sinon.useFakeTimers(new Date("2016-01-31 23:00").getTime());
expect(relativeTime.format(new Date("2016-02-01 05:00"))).to.equal("in 6 hours");
expect(relativeTime.format(new Date("2016-02-01 07:00"))).to.equal("tomorrow");

sinon.useFakeTimers(new Date("2016-12-31 23:00").getTime());
expect(relativeTime.format(new Date("2017-01-01 05:00"))).to.equal("in 6 hours");
expect(relativeTime.format(new Date("2017-01-01 07:00"))).to.equal("tomorrow");
});

it("should format days distant dates", function() {
Expand All @@ -66,18 +74,22 @@ describe("relative-time", function() {
expect(relativeTime.format(new Date("2016-05-01 00:00"))).to.equal("next month");
expect(relativeTime.format(new Date("2016-11-31 23:59"))).to.equal("in 8 months");

// sinon.useFakeTimers(new Date("2016-10-02 12:00").getTime());
// element = shallow(<RelativeTime>{new Date("2017-01-01 00:00")}</RelativeTime>);
// expect(element.text()).to.equal("in 3 months");
sinon.useFakeTimers(new Date("2017-01-12 18:30").getTime());
expect(relativeTime.format(new Date("2016-12-29 18:30"))).to.equal("last month");

sinon.useFakeTimers(new Date("2016-12-29 18:30").getTime());
expect(relativeTime.format(new Date("2017-01-12 18:30"))).to.equal("next month");

// sinon.useFakeTimers(new Date("2016-02-28 12:00").getTime());
// element = shallow(<RelativeTime>{new Date("2015-12-31 23:59")}</RelativeTime>);
// expect(element.text()).to.equal("3 months ago");
sinon.useFakeTimers(new Date("2016-02-28 12:00").getTime());
expect(relativeTime.format(new Date("2015-12-31 23:59"))).to.equal("2 months ago");
});

it("should format years distant dates", function() {
expect(relativeTime.format(new Date("2010-06-01 12:00"))).to.equal("6 years ago");
expect(relativeTime.format(new Date("2015-12-31 23:59"))).to.equal("last year");
expect(relativeTime.format(new Date("2017-01-01 00:00"))).to.equal("next year");

sinon.useFakeTimers(new Date("2016-10-02 12:00").getTime());
expect(relativeTime.format(new Date("2017-01-01 00:00"))).to.equal("next year");
});
});

0 comments on commit 521c202

Please sign in to comment.