Files
habitica/common/script/cron.js

50 lines
1.3 KiB
JavaScript

/*
------------------------------------------------------
Cron and time / day functions
------------------------------------------------------
*/
import _ from 'lodash';
let moment = require('moment');
export const DAY_MAPPING = {
0: 'su',
1: 'm',
2: 't',
3: 'w',
4: 'th',
5: 'f',
6: 's',
};
/*
Each time we perform date maths (cron, task-due-days, etc), we need to consider user preferences.
Specifically {dayStart} (custom day start) and {timezoneOffset}. This function sanitizes / defaults those values.
{now} is also passed in for various purposes, one example being the test scripts scripts testing different "now" times.
*/
export function sanitizeOptions (o) {
let ref = Number(o.dayStart);
let dayStart = !_.isNaN(ref) && ref >= 0 && ref <= 24 ? ref : 0;
let timezoneOffset = o.timezoneOffset ? Number(o.timezoneOffset) : Number(moment().zone());
// TODO: check and clean timezoneOffset as for dayStart (e.g., might not be a number)
let now = o.now ? moment(o.now).zone(timezoneOffset) : moment().zone(timezoneOffset);
// return a new object, we don't want to add "now" to user object
return {
dayStart,
timezoneOffset,
now,
};
}
export function startOfWeek (options) {
if (options === null) {
options = {};
}
let o = sanitizeOptions(options);
return moment(o.now).startOf('week');
}