refactor api.startOfDay to a cron.js function not exposed on api

This commit is contained in:
Alys
2015-11-22 07:13:44 +10:00
parent 6183fd9e71
commit 2f8b6d68e8
3 changed files with 31 additions and 25 deletions

View File

@@ -47,3 +47,24 @@ export function startOfWeek (options) {
return moment(o.now).startOf('week'); return moment(o.now).startOf('week');
} }
/*
This is designed for use with any date that has an important time portion (e.g., when comparing the current date-time with the previous cron's date-time for determing if cron should run now).
It changes the time portion of the date-time to be the Custom Day Start hour, so that the date-time is now the user's correct start of day.
It SUBTRACTS a day if the date-time's original hour is before CDS (e.g., if your CDS is 5am and it's currently 4am, it's still the previous day).
This is NOT suitable for manipulating any dates that are displayed to the user as a date with no time portion, such as a Daily's Start Dates (e.g., a Start Date of today shows only the date, so it should be considered to be today even if the hidden time portion is before CDS).
*/
export function startOfDay (options) {
if (options === null) {
options = {};
}
let o = sanitizeOptions(options);
let dayStart = moment(o.now).startOf('day').add({ hours: o.dayStart });
if (moment(o.now).hour() < o.dayStart) {
dayStart.subtract({ days: 1 });
}
return dayStart;
}

View File

@@ -1,6 +1,7 @@
import { import {
DAY_MAPPING, // temporary, pending further refactoring DAY_MAPPING, // temporary, pending further refactoring
sanitizeOptions, // temporary, pending further refactoring sanitizeOptions, // temporary, pending further refactoring
startOfDay, // temporary, pending further refactoring
} from '../../common/script/cron'; } from '../../common/script/cron';
var $w, _, api, content, i18n, moment, preenHistory, sortOrder, var $w, _, api, content, i18n, moment, preenHistory, sortOrder,
@@ -73,23 +74,6 @@ api.planGemLimits = {
------------------------------------------------------ ------------------------------------------------------
*/ */
api.startOfDay = function(options) {
var dayStart, o;
if (options == null) {
options = {};
}
o = sanitizeOptions(options);
dayStart = moment(o.now).startOf('day').add({
hours: o.dayStart
});
if (moment(o.now).hour() < o.dayStart) {
dayStart.subtract({
days: 1
});
}
return dayStart;
};
/* /*
Absolute diff from "yesterday" till now Absolute diff from "yesterday" till now
*/ */
@@ -100,9 +84,9 @@ api.daysSince = function(yesterday, options) {
options = {}; options = {};
} }
o = sanitizeOptions(options); o = sanitizeOptions(options);
return api.startOfDay(_.defaults({ return startOfDay(_.defaults({
now: o.now now: o.now
}, o)).diff(api.startOfDay(_.defaults({ }, o)).diff(startOfDay(_.defaults({
now: yesterday now: yesterday
}, o)), 'days'); }, o)), 'days');
}; };
@@ -121,7 +105,7 @@ api.shouldDo = function(day, dailyTask, options) {
return false; return false;
} }
o = sanitizeOptions(options); o = sanitizeOptions(options);
startOfDayWithCDSTime = api.startOfDay(_.defaults({ startOfDayWithCDSTime = startOfDay(_.defaults({
now: day now: day
}, o)); }, o));
taskStartDate = moment(dailyTask.startDate).zone(o.timezoneOffset); taskStartDate = moment(dailyTask.startDate).zone(o.timezoneOffset);

View File

@@ -2,6 +2,7 @@
import { import {
DAY_MAPPING, DAY_MAPPING,
startOfWeek, startOfWeek,
startOfDay,
} from '../../common/script/cron'; } from '../../common/script/cron';
let expect = require('expect.js'); let expect = require('expect.js');
@@ -1190,7 +1191,7 @@ describe('Cron', () => {
let fstr = 'YYYY-MM-DD HH: mm: ss'; let fstr = 'YYYY-MM-DD HH: mm: ss';
it('startOfDay before dayStart', () => { it('startOfDay before dayStart', () => {
let start = shared.startOfDay({ let start = startOfDay({
now: moment('2014-10-09 02: 30: 00'), now: moment('2014-10-09 02: 30: 00'),
dayStart, dayStart,
}); });
@@ -1198,7 +1199,7 @@ describe('Cron', () => {
expect(start.format(fstr)).to.eql('2014-10-08 04: 00: 00'); expect(start.format(fstr)).to.eql('2014-10-08 04: 00: 00');
}); });
it('startOfDay after dayStart', () => { it('startOfDay after dayStart', () => {
let start = shared.startOfDay({ let start = startOfDay({
now: moment('2014-10-09 05: 30: 00'), now: moment('2014-10-09 05: 30: 00'),
dayStart, dayStart,
}); });
@@ -1501,17 +1502,17 @@ describe('Helper', () => {
let today = '2013-01-01 00: 00: 00'; let today = '2013-01-01 00: 00: 00';
let zone = moment(today).zone(); let zone = moment(today).zone();
expect(shared.startOfDay({ expect(startOfDay({
now: new Date(2013, 0, 1, 0), now: new Date(2013, 0, 1, 0),
}, { }, {
timezoneOffset: zone, timezoneOffset: zone,
}).format(fstr)).to.eql(today); }).format(fstr)).to.eql(today);
expect(shared.startOfDay({ expect(startOfDay({
now: new Date(2013, 0, 1, 5), now: new Date(2013, 0, 1, 5),
}, { }, {
timezoneOffset: zone, timezoneOffset: zone,
}).format(fstr)).to.eql(today); }).format(fstr)).to.eql(today);
expect(shared.startOfDay({ expect(startOfDay({
now: new Date(2013, 0, 1, 23, 59, 59), now: new Date(2013, 0, 1, 23, 59, 59),
timezoneOffset: zone, timezoneOffset: zone,
}).format(fstr)).to.eql(today); }).format(fstr)).to.eql(today);