mirror of https://github.com/therootcompany/tz.js
133 lines
3.7 KiB
JavaScript
133 lines
3.7 KiB
JavaScript
var d = new Date("5/18/2019, 07:49:13");
|
|
// Fri May 17 2019 17:49:13 GMT-0400 (Eastern Daylight Time)
|
|
// utc should be Fri, 17 May 2019 21:49:13 GMT"
|
|
//
|
|
console.log("d:" + d)
|
|
console.log("tzUTC:" + tzUTC(d, 'Australia/Sydney'))
|
|
|
|
d = new Date("5/17/2019, 14:53:21");
|
|
console.log("d:" + d)
|
|
|
|
// Fri May 17 2019 17:53:21 GMT-0400 (Eastern Daylight Time)
|
|
// utc "Fri, 17 May 2019 21:53:21 GMT"
|
|
|
|
console.log("tzUTC:" + tzUTC(d, 'America/Los_Angeles'))
|
|
|
|
|
|
//////
|
|
////// 9:01 twice
|
|
//////
|
|
|
|
var d = new Date("3/10/2019, 01:59:00");
|
|
console.log("tzUTC:" + tzUTC(d, 'America/Denver'));
|
|
// tzUTC:Sun, 10 Mar 2019 08:59:00 GMT
|
|
|
|
var d = new Date("3/10/2019, 02:01:00");
|
|
console.log("tzUTC:" + tzUTC(d, 'America/Denver'));
|
|
// tzUTC:Sun, 10 Mar 2019 09:01:00 GMT
|
|
|
|
var d = new Date("3/10/2019, 02:59:00");
|
|
console.log("tzUTC:" + tzUTC(d, 'America/Denver'));
|
|
// tzUTC:Sun, 10 Mar 2019 09:59:00 GMT
|
|
|
|
var d = new Date("3/10/2019, 03:01:00");
|
|
console.log("tzUTC:" + tzUTC(d, 'America/Denver'));
|
|
// tzUTC:Sun, 10 Mar 2019 09:01:00 GMT
|
|
|
|
//////
|
|
////// 8:01 never
|
|
//////
|
|
|
|
var d = new Date("11/03/2019, 01:59:00");
|
|
console.log("tzUTC:" + tzUTC(d, 'America/Denver'));
|
|
// tzUTC:Sun, 03 Nov 2019 07:59:00 GMT
|
|
|
|
var d = new Date("11/03/2019, 02:01:00");
|
|
console.log("tzUTC:" + tzUTC(d, 'America/Denver'));
|
|
// tzUTC:Sun, 03 Nov 2019 09:01:00 GMT
|
|
|
|
var d = new Date("11/03/2019, 02:59:00");
|
|
console.log("tzUTC:" + tzUTC(d, 'America/Denver'));
|
|
// tzUTC:Sun, 03 Nov 2019 09:59:00 GMT
|
|
|
|
var d = new Date("11/03/2019, 03:01:00");
|
|
console.log("tzUTC:" + tzUTC(d, 'America/Denver'));
|
|
tzUTC:Sun, 03 Nov 2019 10:01:00 GMT
|
|
|
|
|
|
/*
|
|
Yes, that's a major use case. And one that can contact people according to their timezone. The daylight savings problem most likely won't affect us. But it could.
|
|
As a failsafe is there a way that you could detect daylight savings time and report it? Perhaps create 3 times and check that the difference on either side is exactly 1.5 hours?
|
|
*/
|
|
|
|
/*
|
|
But there's a second thing, more along the lines of a scheduler:
|
|
|
|
Given a target date in local time, produce the same local time a week later.
|
|
|
|
"I'm having lunch with John today at 12:30 pm. Schedule a lunch next week at 12:30pm."
|
|
|
|
The naive approach that almost always works is to simply add (7 x 24 x 60 x 60 x 1000), but that won't work if the lunch happened on either of these days:
|
|
|
|
var d = new Date("03/07/2019, 12:30:00"); // + (7 * 24 * 60 * 60 * 1000)
|
|
|
|
var d = new Date("11/01/2019, 12:30:00"); // + (7 * 24 * 60 * 60 * 1000)
|
|
|
|
In both instances my simple calendar would be off by an hour.
|
|
*/
|
|
|
|
/*
|
|
I think the solution will be:
|
|
|
|
srcMs = toMs(srcLocalDate)
|
|
targetMs = srcMs + diffMs
|
|
targetLocalDate = toLocal(targetMs)
|
|
targetMs += toMsAsIfUtc(srcLocalDate) - (toMsAsIfUtc(targetLocalDate) - diffMs)
|
|
return toLocalDate(targetMs)
|
|
*/
|
|
|
|
(function (exports) {
|
|
'use strict';
|
|
|
|
exports.TEST = function (myfn) {
|
|
|
|
var tests = [
|
|
{ name: "normal date"
|
|
, input: { d: '5/18/2019, 8:59:48 AM', tz: "America/Denver" }
|
|
, expected: 1558191588007
|
|
}
|
|
];
|
|
|
|
function next() {
|
|
var t = tests.shift();
|
|
var result;
|
|
if (!t) {
|
|
return true;
|
|
}
|
|
try {
|
|
result = Promise.resolve(myfn(t.input));
|
|
} catch(e) {
|
|
result = Promise.reject(e);
|
|
}
|
|
|
|
result.then(function (result) {
|
|
if (result === t.expected) {
|
|
return true;
|
|
}
|
|
throw new Error(t.name + ": result did not match expected: " + JSON.stringify(result) + " vs " + JSON.stringify(t.expected));
|
|
});
|
|
}
|
|
|
|
return next();
|
|
};
|
|
}('undefined' === typeof module ? window : module.exports));
|
|
|
|
runner.js:
|
|
(function (exports) {
|
|
'use strict';
|
|
|
|
var tzUtc = exports.tzUtc || require('./index.js').tzUtc;
|
|
var tester = exports.TEST || require('./test.js').TEST;
|
|
tester(tzUtc);
|
|
|
|
}('undefined' === typeof module ? window : module.exports)); |