New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

chronoshift

Package Overview
Dependencies
Maintainers
1
Versions
53
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

chronoshift - npm Package Compare versions

Comparing version 0.4.1 to 0.4.2

8

build/chronoshift.d.ts

@@ -103,2 +103,10 @@ /// <reference path="../typings/immutable-class.d.ts" />

function parseISODate(date: string, timezone?: Timezone): Date;
interface IntervalParse {
computedStart: Date;
computedEnd: Date;
start?: Date;
end?: Date;
duration?: Duration;
}
function parseInterval(str: string, timezone?: Timezone, now?: Date): IntervalParse;
}

@@ -105,0 +113,0 @@

@@ -664,2 +664,65 @@ "use strict";

Chronoshift.parseISODate = parseISODate;
function parseInterval(str, timezone, now) {
if (timezone === void 0) { timezone = Chronoshift.Timezone.UTC; }
if (now === void 0) { now = new Date(); }
var parts = str.split('/');
if (parts.length > 2)
throw new Error("Can not parse string " + str);
var start = null;
var end = null;
var duration = null;
var p0 = parts[0];
if (parts.length === 1) {
duration = Chronoshift.Duration.fromJS(p0);
}
else {
var p1 = parts[1];
if (p0[0] === 'P') {
duration = Chronoshift.Duration.fromJS(p0);
end = parseISODate(p1, timezone);
if (!end)
throw new Error("can not parse '" + p1 + "' as ISO date");
}
else if (p1[0] === 'P') {
start = parseISODate(p0, timezone);
if (!start)
throw new Error("can not parse '" + p0 + "' as ISO date");
duration = Chronoshift.Duration.fromJS(p1);
}
else {
start = parseISODate(p0, timezone);
if (!start)
throw new Error("can not parse '" + p0 + "' as ISO date");
end = parseISODate(p1, timezone);
if (!end)
throw new Error("can not parse '" + p1 + "' as ISO date");
if (end < start) {
throw new Error("start must be <= end in '" + str + "'");
}
}
}
var computedStart = null;
var computedEnd = null;
if (start) {
computedStart = start;
if (duration) {
computedEnd = duration.shift(computedStart, timezone, 1);
}
else {
computedEnd = end;
}
}
else {
computedEnd = end || now;
computedStart = duration.shift(computedEnd, timezone, -1);
}
return {
computedStart: computedStart,
computedEnd: computedEnd,
start: start,
end: end,
duration: duration
};
}
Chronoshift.parseInterval = parseInterval;
})(Chronoshift || (Chronoshift = {}));

@@ -666,0 +729,0 @@ if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {

2

package.json
{
"name": "chronoshift",
"version": "0.4.1",
"version": "0.4.2",
"description": "A tiny library for shifting time with timezones",

@@ -5,0 +5,0 @@ "keywords": [

@@ -160,2 +160,74 @@ module Chronoshift {

export interface IntervalParse {
computedStart: Date;
computedEnd: Date;
start?: Date;
end?: Date;
duration?: Duration;
}
export function parseInterval(str: string, timezone = Timezone.UTC, now = new Date()): IntervalParse {
var parts = str.split('/');
if (parts.length > 2) throw new Error(`Can not parse string ${str}`);
var start: Date = null;
var end: Date = null;
var duration: Duration = null;
var p0: string = parts[0];
if (parts.length === 1) {
duration = Duration.fromJS(p0);
} else {
var p1 = parts[1];
if (p0[0] === 'P') {
duration = Duration.fromJS(p0);
end = parseISODate(p1, timezone);
if (!end) throw new Error(`can not parse '${p1}' as ISO date`);
} else if (p1[0] === 'P') {
start = parseISODate(p0, timezone);
if (!start) throw new Error(`can not parse '${p0}' as ISO date`);
duration = Duration.fromJS(p1);
} else {
start = parseISODate(p0, timezone);
if (!start) throw new Error(`can not parse '${p0}' as ISO date`);
end = parseISODate(p1, timezone);
if (!end) throw new Error(`can not parse '${p1}' as ISO date`);
if (end < start) {
throw new Error(`start must be <= end in '${str}'`);
}
}
}
/*
Has to be one of:
<start>/<end>
<start>/<duration>
<duration>/<end>
<duration>
*/
var computedStart: Date = null;
var computedEnd: Date = null;
if (start) {
computedStart = start;
if (duration) {
computedEnd = duration.shift(computedStart, timezone, 1);
} else {
computedEnd = end;
}
} else {
computedEnd = end || now;
computedStart = duration.shift(computedEnd, timezone, -1);
}
return {
computedStart,
computedEnd,
start,
end,
duration
};
}
}

@@ -13,83 +13,139 @@ /// <reference path="../typings/mocha/mocha.d.ts" />

}
var parseISODate = chronoshift.parseISODate;
describe('parseISODate', function () {
var sixHours = 6 * 60 * 60 * 1000, sixHoursThirty = sixHours + 30 * 60 * 1000;
// Taken from https://github.com/csnover/js-iso8601/blob/lax/tests/test.js
it('date-part', function () {
deepEqual(parseISODate('1970-01-01'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'Unix epoch');
deepEqual(parseISODate('2001'), new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)), '2001');
deepEqual(parseISODate('2001-02'), new Date(Date.UTC(2001, 1, 1, 0, 0, 0, 0)), '2001-02');
deepEqual(parseISODate('2001-02-03'), new Date(Date.UTC(2001, 1, 3, 0, 0, 0, 0)), '2001-02-03');
deepEqual(parseISODate('2001-02-03Z'), new Date(Date.UTC(2001, 1, 3, 0, 0, 0, 0)), '2001-02-03Z');
deepEqual(parseISODate('-002001'), new Date(Date.UTC(-2001, 0, 1, 0, 0, 0, 0)), '-002001');
deepEqual(parseISODate('-002001-02'), new Date(Date.UTC(-2001, 1, 1, 0, 0, 0, 0)), '-002001-02');
deepEqual(parseISODate('-002001-02-03'), new Date(Date.UTC(-2001, 1, 3, 0, 0, 0, 0)), '-002001-02-03');
deepEqual(parseISODate('+010000-02'), new Date(Date.UTC(10000, 1, 1, 0, 0, 0, 0)), '+010000-02');
deepEqual(parseISODate('+010000-02-03'), new Date(Date.UTC(10000, 1, 3, 0, 0, 0, 0)), '+010000-02-03');
deepEqual(parseISODate('-010000-02'), new Date(Date.UTC(-10000, 1, 1, 0, 0, 0, 0)), '-010000-02');
deepEqual(parseISODate('-010000-02-03'), new Date(Date.UTC(-10000, 1, 3, 0, 0, 0, 0)), '-010000-02-03');
deepEqual(parseISODate('19700101'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated Unix epoch');
deepEqual(parseISODate('19700101Z'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated Unix epoch Z');
deepEqual(parseISODate('asdf'), null, 'invalid YYYY (non-digits)');
deepEqual(parseISODate('1970-as-df'), null, 'invalid YYYY-MM-DD (non-digits)');
deepEqual(parseISODate('1970-01-'), null, 'invalid YYYY-MM- (extra hyphen)');
deepEqual(parseISODate('197001'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated year-month');
deepEqual(parseISODate('197001Z'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated year-month Z');
// TODO: Test for invalid YYYYMM and invalid YYYYY?
var parseISODate = chronoshift.parseISODate, parseInterval = chronoshift.parseInterval;
describe('date parser', function () {
describe('parseISODate', function () {
var sixHours = 6 * 60 * 60 * 1000, sixHoursThirty = sixHours + 30 * 60 * 1000;
// Taken from https://github.com/csnover/js-iso8601/blob/lax/tests/test.js
it('date-part', function () {
deepEqual(parseISODate('1970-01-01'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'Unix epoch');
deepEqual(parseISODate('2001'), new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)), '2001');
deepEqual(parseISODate('2001-02'), new Date(Date.UTC(2001, 1, 1, 0, 0, 0, 0)), '2001-02');
deepEqual(parseISODate('2001-02-03'), new Date(Date.UTC(2001, 1, 3, 0, 0, 0, 0)), '2001-02-03');
deepEqual(parseISODate('2001-02-03Z'), new Date(Date.UTC(2001, 1, 3, 0, 0, 0, 0)), '2001-02-03Z');
deepEqual(parseISODate('-002001'), new Date(Date.UTC(-2001, 0, 1, 0, 0, 0, 0)), '-002001');
deepEqual(parseISODate('-002001-02'), new Date(Date.UTC(-2001, 1, 1, 0, 0, 0, 0)), '-002001-02');
deepEqual(parseISODate('-002001-02-03'), new Date(Date.UTC(-2001, 1, 3, 0, 0, 0, 0)), '-002001-02-03');
deepEqual(parseISODate('+010000-02'), new Date(Date.UTC(10000, 1, 1, 0, 0, 0, 0)), '+010000-02');
deepEqual(parseISODate('+010000-02-03'), new Date(Date.UTC(10000, 1, 3, 0, 0, 0, 0)), '+010000-02-03');
deepEqual(parseISODate('-010000-02'), new Date(Date.UTC(-10000, 1, 1, 0, 0, 0, 0)), '-010000-02');
deepEqual(parseISODate('-010000-02-03'), new Date(Date.UTC(-10000, 1, 3, 0, 0, 0, 0)), '-010000-02-03');
deepEqual(parseISODate('19700101'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated Unix epoch');
deepEqual(parseISODate('19700101Z'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated Unix epoch Z');
deepEqual(parseISODate('asdf'), null, 'invalid YYYY (non-digits)');
deepEqual(parseISODate('1970-as-df'), null, 'invalid YYYY-MM-DD (non-digits)');
deepEqual(parseISODate('1970-01-'), null, 'invalid YYYY-MM- (extra hyphen)');
deepEqual(parseISODate('197001'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated year-month');
deepEqual(parseISODate('197001Z'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated year-month Z');
// TODO: Test for invalid YYYYMM and invalid YYYYY?
});
it('date-time (tz = UTC)', function () {
deepEqual(parseISODate('2001-02-03T04:05'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05');
deepEqual(parseISODate('2001-02-03T04:05:06'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06');
deepEqual(parseISODate('2001-02-03T04:05:06.007'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05Z'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05Z');
deepEqual(parseISODate('2001-02-03T04:05:06Z'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06Z');
deepEqual(parseISODate('2001-02-03T04:05:06.007Z'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007Z');
deepEqual(parseISODate('2001-02-03T04:05-00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05-00:00');
deepEqual(parseISODate('2001-02-03T04:05:06-00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06-00:00');
deepEqual(parseISODate('2001-02-03T04:05:06.007-00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007-00:00');
deepEqual(parseISODate('2001-02-03T04:05+00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05+00:00');
deepEqual(parseISODate('2001-02-03T04:05:06+00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06+00:00');
deepEqual(parseISODate('2001-02-03T04:05:06.007+00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007+00:00');
deepEqual(parseISODate('2001-02-03T04:05-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0) + sixHoursThirty), '2001-02-03T04:05-06:30');
deepEqual(parseISODate('2001-02-03T04:05:06-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0) + sixHoursThirty), '2001-02-03T04:05:06-06:30');
deepEqual(parseISODate('2001-02-03T04:05:06.007-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7) + sixHoursThirty), '2001-02-03T04:05:06.007-06:30');
deepEqual(parseISODate('2001-02-03T04:05+06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0) - sixHoursThirty), '2001-02-03T04:05+06:30');
deepEqual(parseISODate('2001-02-03T04:05:06+06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0) - sixHoursThirty), '2001-02-03T04:05:06+06:30');
deepEqual(parseISODate('2001-02-03T04:05:06.007+06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7) - sixHoursThirty), '2001-02-03T04:05:06.007+06:30');
deepEqual(parseISODate('2001T04:05:06.007'), new Date(Date.UTC(2001, 0, 1, 4, 5, 6, 7)), '2001T04:05:06.007');
deepEqual(parseISODate('2001-02T04:05:06.007'), new Date(Date.UTC(2001, 1, 1, 4, 5, 6, 7)), '2001-02T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05:06.007'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05:06.07'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 70)), '2001-02-03T04:05:06.07');
deepEqual(parseISODate('2001-02-03T04:05:06.7'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 700)), '2001-02-03T04:05:06.7');
deepEqual(parseISODate('2001-02-03T04:05:06.007-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7) + sixHoursThirty), '2001-02-03T04:05:06.007-06:30');
deepEqual(parseISODate('-010000T04:05'), new Date(Date.UTC(-10000, 0, 1, 4, 5, 0, 0)), '-010000T04:05');
deepEqual(parseISODate('-010000-02T04:05'), new Date(Date.UTC(-10000, 1, 1, 4, 5, 0, 0)), '-010000-02T04:05');
deepEqual(parseISODate('-010000-02-03T04:05'), new Date(Date.UTC(-10000, 1, 3, 4, 5, 0, 0)), '-010000-02-03T04:05');
deepEqual(parseISODate('1970-01-01 00:00:00Z'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'space-separated datetime');
deepEqual(parseISODate('1970-01-01T00:00:00.987654'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 987)), 'extended sub-second precision');
deepEqual(parseISODate('1970-01-01T00:00:00,123'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 123)), 'comma-delimited milliseconds');
deepEqual(parseISODate('1970-01-01T00:00:00+0630'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0) - sixHoursThirty), 'colon-free timezone part');
deepEqual(parseISODate('1970-01-01T000000'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'colon-free time part');
deepEqual(parseISODate('1970-01-01T0000'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'colon-free time part minute hour');
deepEqual(parseISODate('1970-01-01T00'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'hour only time part');
deepEqual(parseISODate('1970-01-01T00:00.000'), null, 'invalid date-time (msec with missing seconds)');
});
it('date-time (tz = America/Los_Angeles)', function () {
var tz = Timezone.fromJS('America/Los_Angeles');
deepEqual(parseISODate('2001-02-03T04:05', tz), new Date(Date.UTC(2001, 1, 3, 4 + 8, 5, 0, 0)), '2001-02-03T04:05');
deepEqual(parseISODate('2001-02-03T04:05:06', tz), new Date(Date.UTC(2001, 1, 3, 4 + 8, 5, 6, 0)), '2001-02-03T04:05:06');
deepEqual(parseISODate('2001-02-03T04:05:06.007', tz), new Date(Date.UTC(2001, 1, 3, 4 + 8, 5, 6, 7)), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05Z');
deepEqual(parseISODate('2001-02-03T04:05:06Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06Z');
deepEqual(parseISODate('2001-02-03T04:05:06.007Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007Z');
});
it('date-time (tz = null / local)', function () {
var tz = null;
deepEqual(parseISODate('2001-02-03T04:05', tz), new Date(2001, 1, 3, 4, 5, 0, 0), '2001-02-03T04:05');
deepEqual(parseISODate('2001-02-03T04:05:06', tz), new Date(2001, 1, 3, 4, 5, 6, 0), '2001-02-03T04:05:06');
deepEqual(parseISODate('2001-02-03T04:05:06.007', tz), new Date(2001, 1, 3, 4, 5, 6, 7), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05Z');
deepEqual(parseISODate('2001-02-03T04:05:06Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06Z');
deepEqual(parseISODate('2001-02-03T04:05:06.007Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007Z');
});
});
it('date-time (tz = UTC)', function () {
deepEqual(parseISODate('2001-02-03T04:05'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05');
deepEqual(parseISODate('2001-02-03T04:05:06'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06');
deepEqual(parseISODate('2001-02-03T04:05:06.007'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05Z'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05Z');
deepEqual(parseISODate('2001-02-03T04:05:06Z'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06Z');
deepEqual(parseISODate('2001-02-03T04:05:06.007Z'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007Z');
deepEqual(parseISODate('2001-02-03T04:05-00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05-00:00');
deepEqual(parseISODate('2001-02-03T04:05:06-00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06-00:00');
deepEqual(parseISODate('2001-02-03T04:05:06.007-00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007-00:00');
deepEqual(parseISODate('2001-02-03T04:05+00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05+00:00');
deepEqual(parseISODate('2001-02-03T04:05:06+00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06+00:00');
deepEqual(parseISODate('2001-02-03T04:05:06.007+00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007+00:00');
deepEqual(parseISODate('2001-02-03T04:05-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0) + sixHoursThirty), '2001-02-03T04:05-06:30');
deepEqual(parseISODate('2001-02-03T04:05:06-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0) + sixHoursThirty), '2001-02-03T04:05:06-06:30');
deepEqual(parseISODate('2001-02-03T04:05:06.007-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7) + sixHoursThirty), '2001-02-03T04:05:06.007-06:30');
deepEqual(parseISODate('2001-02-03T04:05+06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0) - sixHoursThirty), '2001-02-03T04:05+06:30');
deepEqual(parseISODate('2001-02-03T04:05:06+06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0) - sixHoursThirty), '2001-02-03T04:05:06+06:30');
deepEqual(parseISODate('2001-02-03T04:05:06.007+06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7) - sixHoursThirty), '2001-02-03T04:05:06.007+06:30');
deepEqual(parseISODate('2001T04:05:06.007'), new Date(Date.UTC(2001, 0, 1, 4, 5, 6, 7)), '2001T04:05:06.007');
deepEqual(parseISODate('2001-02T04:05:06.007'), new Date(Date.UTC(2001, 1, 1, 4, 5, 6, 7)), '2001-02T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05:06.007'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05:06.07'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 70)), '2001-02-03T04:05:06.07');
deepEqual(parseISODate('2001-02-03T04:05:06.7'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 700)), '2001-02-03T04:05:06.7');
deepEqual(parseISODate('2001-02-03T04:05:06.007-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7) + sixHoursThirty), '2001-02-03T04:05:06.007-06:30');
deepEqual(parseISODate('-010000T04:05'), new Date(Date.UTC(-10000, 0, 1, 4, 5, 0, 0)), '-010000T04:05');
deepEqual(parseISODate('-010000-02T04:05'), new Date(Date.UTC(-10000, 1, 1, 4, 5, 0, 0)), '-010000-02T04:05');
deepEqual(parseISODate('-010000-02-03T04:05'), new Date(Date.UTC(-10000, 1, 3, 4, 5, 0, 0)), '-010000-02-03T04:05');
deepEqual(parseISODate('1970-01-01 00:00:00Z'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'space-separated datetime');
deepEqual(parseISODate('1970-01-01T00:00:00.987654'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 987)), 'extended sub-second precision');
deepEqual(parseISODate('1970-01-01T00:00:00,123'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 123)), 'comma-delimited milliseconds');
deepEqual(parseISODate('1970-01-01T00:00:00+0630'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0) - sixHoursThirty), 'colon-free timezone part');
deepEqual(parseISODate('1970-01-01T000000'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'colon-free time part');
deepEqual(parseISODate('1970-01-01T0000'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'colon-free time part minute hour');
deepEqual(parseISODate('1970-01-01T00'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'hour only time part');
deepEqual(parseISODate('1970-01-01T00:00.000'), null, 'invalid date-time (msec with missing seconds)');
describe('parseInterval', function () {
it('errors on bad start', function () {
chai_1.expect(function () {
parseInterval('2001-02-03T03:05:06.wdf007Z/2001-02-03T04:05:06.007Z');
}).to.throw("can not parse '2001-02-03T03:05:06.wdf007Z' as ISO date");
});
it('errors on bad end', function () {
chai_1.expect(function () {
parseInterval('2001-02-03T03:05:06.007Z/2001-02-03T04:0ada5:06.007Z');
}).to.throw("can not parse '2001-02-03T04:0ada5:06.007Z' as ISO date");
});
it('errors on bad duration', function () {
chai_1.expect(function () {
parseInterval('P1poop');
}).to.throw("Can not parse duration 'P1poop'");
});
it('errors on flipped start end', function () {
chai_1.expect(function () {
parseInterval('2001-02-03T07:05:06.007Z/2001-02-03T04:05:06.007Z');
}).to.throw("start must be <= end in '2001-02-03T07:05:06.007Z/2001-02-03T04:05:06.007Z'");
});
/*
Has to be one of:
[start]/[end]
[start]/[duration]
[duration]/[end]
[duration]
*/
it('works with [start]/[end]', function () {
var tz = Timezone.UTC;
var interval = parseInterval('2001-02-03T03:05:06.007Z/2001-02-03T04:05:06.007Z', tz);
chai_1.expect(interval.computedStart).to.deep.equal(new Date('2001-02-03T03:05:06.007Z'));
chai_1.expect(interval.computedEnd).to.deep.equal(new Date('2001-02-03T04:05:06.007Z'));
});
it('works with [start]/[duration]', function () {
var tz = Timezone.UTC;
var interval = parseInterval('2001-02-03T03:05:06.007Z/PT1H', tz);
chai_1.expect(interval.computedStart).to.deep.equal(new Date('2001-02-03T03:05:06.007Z'));
chai_1.expect(interval.computedEnd).to.deep.equal(new Date('2001-02-03T04:05:06.007Z'));
});
it('works with [duration]/[end]', function () {
var tz = Timezone.UTC;
var interval = parseInterval('PT1H/2001-02-03T04:05:06.007Z', tz);
chai_1.expect(interval.computedStart).to.deep.equal(new Date('2001-02-03T03:05:06.007Z'));
chai_1.expect(interval.computedEnd).to.deep.equal(new Date('2001-02-03T04:05:06.007Z'));
});
it('works with [duration]', function () {
var now = new Date('2001-02-03T04:05:06.007Z');
var tz = Timezone.UTC;
var interval = parseInterval('PT1H', tz, now);
chai_1.expect(interval.computedStart).to.deep.equal(new Date('2001-02-03T03:05:06.007Z'));
chai_1.expect(interval.computedEnd).to.deep.equal(new Date('2001-02-03T04:05:06.007Z'));
});
});
it('date-time (tz = America/Los_Angeles)', function () {
var tz = Timezone.fromJS('America/Los_Angeles');
deepEqual(parseISODate('2001-02-03T04:05', tz), new Date(Date.UTC(2001, 1, 3, 4 + 8, 5, 0, 0)), '2001-02-03T04:05');
deepEqual(parseISODate('2001-02-03T04:05:06', tz), new Date(Date.UTC(2001, 1, 3, 4 + 8, 5, 6, 0)), '2001-02-03T04:05:06');
deepEqual(parseISODate('2001-02-03T04:05:06.007', tz), new Date(Date.UTC(2001, 1, 3, 4 + 8, 5, 6, 7)), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05Z');
deepEqual(parseISODate('2001-02-03T04:05:06Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06Z');
deepEqual(parseISODate('2001-02-03T04:05:06.007Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007Z');
});
it('date-time (tz = null / local)', function () {
var tz = null;
deepEqual(parseISODate('2001-02-03T04:05', tz), new Date(2001, 1, 3, 4, 5, 0, 0), '2001-02-03T04:05');
deepEqual(parseISODate('2001-02-03T04:05:06', tz), new Date(2001, 1, 3, 4, 5, 6, 0), '2001-02-03T04:05:06');
deepEqual(parseISODate('2001-02-03T04:05:06.007', tz), new Date(2001, 1, 3, 4, 5, 6, 7), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05Z');
deepEqual(parseISODate('2001-02-03T04:05:06Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06Z');
deepEqual(parseISODate('2001-02-03T04:05:06.007Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007Z');
});
});

@@ -5,3 +5,3 @@ /// <reference path="../typings/mocha/mocha.d.ts" />

import { assert } from "chai";
import { expect, assert } from "chai";
var { deepEqual } = assert;

@@ -19,110 +19,180 @@

var { parseISODate } = chronoshift;
var { parseISODate, parseInterval } = chronoshift;
describe('parseISODate', () => {
var sixHours = 6 * 60 * 60 * 1000,
sixHoursThirty = sixHours + 30 * 60 * 1000;
describe('date parser', () => {
// Taken from https://github.com/csnover/js-iso8601/blob/lax/tests/test.js
it('date-part', function () {
deepEqual(parseISODate('1970-01-01'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'Unix epoch');
describe('parseISODate', () => {
var sixHours = 6 * 60 * 60 * 1000,
sixHoursThirty = sixHours + 30 * 60 * 1000;
deepEqual(parseISODate('2001'), new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)), '2001');
deepEqual(parseISODate('2001-02'), new Date(Date.UTC(2001, 1, 1, 0, 0, 0, 0)), '2001-02');
deepEqual(parseISODate('2001-02-03'), new Date(Date.UTC(2001, 1, 3, 0, 0, 0, 0)), '2001-02-03');
deepEqual(parseISODate('2001-02-03Z'), new Date(Date.UTC(2001, 1, 3, 0, 0, 0, 0)), '2001-02-03Z');
// Taken from https://github.com/csnover/js-iso8601/blob/lax/tests/test.js
it('date-part', () => {
deepEqual(parseISODate('1970-01-01'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'Unix epoch');
deepEqual(parseISODate('-002001'), new Date(Date.UTC(-2001, 0, 1, 0, 0, 0, 0)), '-002001');
deepEqual(parseISODate('-002001-02'), new Date(Date.UTC(-2001, 1, 1, 0, 0, 0, 0)), '-002001-02');
deepEqual(parseISODate('-002001-02-03'), new Date(Date.UTC(-2001, 1, 3, 0, 0, 0, 0)), '-002001-02-03');
deepEqual(parseISODate('2001'), new Date(Date.UTC(2001, 0, 1, 0, 0, 0, 0)), '2001');
deepEqual(parseISODate('2001-02'), new Date(Date.UTC(2001, 1, 1, 0, 0, 0, 0)), '2001-02');
deepEqual(parseISODate('2001-02-03'), new Date(Date.UTC(2001, 1, 3, 0, 0, 0, 0)), '2001-02-03');
deepEqual(parseISODate('2001-02-03Z'), new Date(Date.UTC(2001, 1, 3, 0, 0, 0, 0)), '2001-02-03Z');
deepEqual(parseISODate('+010000-02'), new Date(Date.UTC(10000, 1, 1, 0, 0, 0, 0)), '+010000-02');
deepEqual(parseISODate('+010000-02-03'), new Date(Date.UTC(10000, 1, 3, 0, 0, 0, 0)), '+010000-02-03');
deepEqual(parseISODate('-010000-02'), new Date(Date.UTC(-10000, 1, 1, 0, 0, 0, 0)), '-010000-02');
deepEqual(parseISODate('-010000-02-03'), new Date(Date.UTC(-10000, 1, 3, 0, 0, 0, 0)), '-010000-02-03');
deepEqual(parseISODate('-002001'), new Date(Date.UTC(-2001, 0, 1, 0, 0, 0, 0)), '-002001');
deepEqual(parseISODate('-002001-02'), new Date(Date.UTC(-2001, 1, 1, 0, 0, 0, 0)), '-002001-02');
deepEqual(parseISODate('-002001-02-03'), new Date(Date.UTC(-2001, 1, 3, 0, 0, 0, 0)), '-002001-02-03');
deepEqual(parseISODate('19700101'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated Unix epoch');
deepEqual(parseISODate('19700101Z'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated Unix epoch Z');
deepEqual(parseISODate('+010000-02'), new Date(Date.UTC(10000, 1, 1, 0, 0, 0, 0)), '+010000-02');
deepEqual(parseISODate('+010000-02-03'), new Date(Date.UTC(10000, 1, 3, 0, 0, 0, 0)), '+010000-02-03');
deepEqual(parseISODate('-010000-02'), new Date(Date.UTC(-10000, 1, 1, 0, 0, 0, 0)), '-010000-02');
deepEqual(parseISODate('-010000-02-03'), new Date(Date.UTC(-10000, 1, 3, 0, 0, 0, 0)), '-010000-02-03');
deepEqual(parseISODate('asdf'), null, 'invalid YYYY (non-digits)');
deepEqual(parseISODate('1970-as-df'), null, 'invalid YYYY-MM-DD (non-digits)');
deepEqual(parseISODate('1970-01-'), null, 'invalid YYYY-MM- (extra hyphen)');
deepEqual(parseISODate('197001'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated year-month');
deepEqual(parseISODate('197001Z'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated year-month Z');
deepEqual(parseISODate('19700101'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated Unix epoch');
deepEqual(parseISODate('19700101Z'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated Unix epoch Z');
// TODO: Test for invalid YYYYMM and invalid YYYYY?
});
deepEqual(parseISODate('asdf'), null, 'invalid YYYY (non-digits)');
deepEqual(parseISODate('1970-as-df'), null, 'invalid YYYY-MM-DD (non-digits)');
deepEqual(parseISODate('1970-01-'), null, 'invalid YYYY-MM- (extra hyphen)');
deepEqual(parseISODate('197001'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated year-month');
deepEqual(parseISODate('197001Z'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'non-hyphenated year-month Z');
it('date-time (tz = UTC)', function () {
deepEqual(parseISODate('2001-02-03T04:05'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05');
deepEqual(parseISODate('2001-02-03T04:05:06'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06');
deepEqual(parseISODate('2001-02-03T04:05:06.007'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007');
// TODO: Test for invalid YYYYMM and invalid YYYYY?
});
deepEqual(parseISODate('2001-02-03T04:05Z'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05Z');
deepEqual(parseISODate('2001-02-03T04:05:06Z'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06Z');
deepEqual(parseISODate('2001-02-03T04:05:06.007Z'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007Z');
it('date-time (tz = UTC)', () => {
deepEqual(parseISODate('2001-02-03T04:05'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05');
deepEqual(parseISODate('2001-02-03T04:05:06'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06');
deepEqual(parseISODate('2001-02-03T04:05:06.007'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05-00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05-00:00');
deepEqual(parseISODate('2001-02-03T04:05:06-00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06-00:00');
deepEqual(parseISODate('2001-02-03T04:05:06.007-00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007-00:00');
deepEqual(parseISODate('2001-02-03T04:05Z'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05Z');
deepEqual(parseISODate('2001-02-03T04:05:06Z'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06Z');
deepEqual(parseISODate('2001-02-03T04:05:06.007Z'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007Z');
deepEqual(parseISODate('2001-02-03T04:05+00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05+00:00');
deepEqual(parseISODate('2001-02-03T04:05:06+00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06+00:00');
deepEqual(parseISODate('2001-02-03T04:05:06.007+00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007+00:00');
deepEqual(parseISODate('2001-02-03T04:05-00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05-00:00');
deepEqual(parseISODate('2001-02-03T04:05:06-00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06-00:00');
deepEqual(parseISODate('2001-02-03T04:05:06.007-00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007-00:00');
deepEqual(parseISODate('2001-02-03T04:05-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0) + sixHoursThirty), '2001-02-03T04:05-06:30');
deepEqual(parseISODate('2001-02-03T04:05:06-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0) + sixHoursThirty), '2001-02-03T04:05:06-06:30');
deepEqual(parseISODate('2001-02-03T04:05:06.007-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7) + sixHoursThirty), '2001-02-03T04:05:06.007-06:30');
deepEqual(parseISODate('2001-02-03T04:05+00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05+00:00');
deepEqual(parseISODate('2001-02-03T04:05:06+00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06+00:00');
deepEqual(parseISODate('2001-02-03T04:05:06.007+00:00'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007+00:00');
deepEqual(parseISODate('2001-02-03T04:05+06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0) - sixHoursThirty), '2001-02-03T04:05+06:30');
deepEqual(parseISODate('2001-02-03T04:05:06+06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0) - sixHoursThirty), '2001-02-03T04:05:06+06:30');
deepEqual(parseISODate('2001-02-03T04:05:06.007+06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7) - sixHoursThirty), '2001-02-03T04:05:06.007+06:30');
deepEqual(parseISODate('2001-02-03T04:05-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0) + sixHoursThirty), '2001-02-03T04:05-06:30');
deepEqual(parseISODate('2001-02-03T04:05:06-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0) + sixHoursThirty), '2001-02-03T04:05:06-06:30');
deepEqual(parseISODate('2001-02-03T04:05:06.007-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7) + sixHoursThirty), '2001-02-03T04:05:06.007-06:30');
deepEqual(parseISODate('2001T04:05:06.007'), new Date(Date.UTC(2001, 0, 1, 4, 5, 6, 7)), '2001T04:05:06.007');
deepEqual(parseISODate('2001-02T04:05:06.007'), new Date(Date.UTC(2001, 1, 1, 4, 5, 6, 7)), '2001-02T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05:06.007'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05:06.07'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 70)), '2001-02-03T04:05:06.07');
deepEqual(parseISODate('2001-02-03T04:05:06.7'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 700)), '2001-02-03T04:05:06.7');
deepEqual(parseISODate('2001-02-03T04:05:06.007-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7) + sixHoursThirty), '2001-02-03T04:05:06.007-06:30');
deepEqual(parseISODate('2001-02-03T04:05+06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0) - sixHoursThirty), '2001-02-03T04:05+06:30');
deepEqual(parseISODate('2001-02-03T04:05:06+06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0) - sixHoursThirty), '2001-02-03T04:05:06+06:30');
deepEqual(parseISODate('2001-02-03T04:05:06.007+06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7) - sixHoursThirty), '2001-02-03T04:05:06.007+06:30');
deepEqual(parseISODate('-010000T04:05'), new Date(Date.UTC(-10000, 0, 1, 4, 5, 0, 0)), '-010000T04:05');
deepEqual(parseISODate('-010000-02T04:05'), new Date(Date.UTC(-10000, 1, 1, 4, 5, 0, 0)), '-010000-02T04:05');
deepEqual(parseISODate('-010000-02-03T04:05'), new Date(Date.UTC(-10000, 1, 3, 4, 5, 0, 0)), '-010000-02-03T04:05');
deepEqual(parseISODate('2001T04:05:06.007'), new Date(Date.UTC(2001, 0, 1, 4, 5, 6, 7)), '2001T04:05:06.007');
deepEqual(parseISODate('2001-02T04:05:06.007'), new Date(Date.UTC(2001, 1, 1, 4, 5, 6, 7)), '2001-02T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05:06.007'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05:06.07'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 70)), '2001-02-03T04:05:06.07');
deepEqual(parseISODate('2001-02-03T04:05:06.7'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 700)), '2001-02-03T04:05:06.7');
deepEqual(parseISODate('2001-02-03T04:05:06.007-06:30'), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7) + sixHoursThirty), '2001-02-03T04:05:06.007-06:30');
deepEqual(parseISODate('1970-01-01 00:00:00Z'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'space-separated datetime');
deepEqual(parseISODate('1970-01-01T00:00:00.987654'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 987)), 'extended sub-second precision');
deepEqual(parseISODate('1970-01-01T00:00:00,123'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 123)), 'comma-delimited milliseconds');
deepEqual(parseISODate('1970-01-01T00:00:00+0630'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0) - sixHoursThirty), 'colon-free timezone part');
deepEqual(parseISODate('1970-01-01T000000'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'colon-free time part');
deepEqual(parseISODate('1970-01-01T0000'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'colon-free time part minute hour');
deepEqual(parseISODate('1970-01-01T00'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'hour only time part');
deepEqual(parseISODate('1970-01-01T00:00.000'), null, 'invalid date-time (msec with missing seconds)');
});
deepEqual(parseISODate('-010000T04:05'), new Date(Date.UTC(-10000, 0, 1, 4, 5, 0, 0)), '-010000T04:05');
deepEqual(parseISODate('-010000-02T04:05'), new Date(Date.UTC(-10000, 1, 1, 4, 5, 0, 0)), '-010000-02T04:05');
deepEqual(parseISODate('-010000-02-03T04:05'), new Date(Date.UTC(-10000, 1, 3, 4, 5, 0, 0)), '-010000-02-03T04:05');
it('date-time (tz = America/Los_Angeles)', function () {
var tz = Timezone.fromJS('America/Los_Angeles');
deepEqual(parseISODate('1970-01-01 00:00:00Z'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'space-separated datetime');
deepEqual(parseISODate('1970-01-01T00:00:00.987654'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 987)), 'extended sub-second precision');
deepEqual(parseISODate('1970-01-01T00:00:00,123'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 123)), 'comma-delimited milliseconds');
deepEqual(parseISODate('1970-01-01T00:00:00+0630'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0) - sixHoursThirty), 'colon-free timezone part');
deepEqual(parseISODate('1970-01-01T000000'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'colon-free time part');
deepEqual(parseISODate('1970-01-01T0000'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'colon-free time part minute hour');
deepEqual(parseISODate('1970-01-01T00'), new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)), 'hour only time part');
deepEqual(parseISODate('1970-01-01T00:00.000'), null, 'invalid date-time (msec with missing seconds)');
});
deepEqual(parseISODate('2001-02-03T04:05', tz), new Date(Date.UTC(2001, 1, 3, 4 + 8, 5, 0, 0)), '2001-02-03T04:05');
deepEqual(parseISODate('2001-02-03T04:05:06', tz), new Date(Date.UTC(2001, 1, 3, 4 + 8, 5, 6, 0)), '2001-02-03T04:05:06');
deepEqual(parseISODate('2001-02-03T04:05:06.007', tz), new Date(Date.UTC(2001, 1, 3, 4 + 8, 5, 6, 7)), '2001-02-03T04:05:06.007');
it('date-time (tz = America/Los_Angeles)', () => {
var tz = Timezone.fromJS('America/Los_Angeles');
deepEqual(parseISODate('2001-02-03T04:05Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05Z');
deepEqual(parseISODate('2001-02-03T04:05:06Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06Z');
deepEqual(parseISODate('2001-02-03T04:05:06.007Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007Z');
deepEqual(parseISODate('2001-02-03T04:05', tz), new Date(Date.UTC(2001, 1, 3, 4 + 8, 5, 0, 0)), '2001-02-03T04:05');
deepEqual(parseISODate('2001-02-03T04:05:06', tz), new Date(Date.UTC(2001, 1, 3, 4 + 8, 5, 6, 0)), '2001-02-03T04:05:06');
deepEqual(parseISODate('2001-02-03T04:05:06.007', tz), new Date(Date.UTC(2001, 1, 3, 4 + 8, 5, 6, 7)), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05Z');
deepEqual(parseISODate('2001-02-03T04:05:06Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06Z');
deepEqual(parseISODate('2001-02-03T04:05:06.007Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007Z');
});
it('date-time (tz = null / local)', () => {
var tz: any = null;
deepEqual(parseISODate('2001-02-03T04:05', tz), new Date(2001, 1, 3, 4, 5, 0, 0), '2001-02-03T04:05');
deepEqual(parseISODate('2001-02-03T04:05:06', tz), new Date(2001, 1, 3, 4, 5, 6, 0), '2001-02-03T04:05:06');
deepEqual(parseISODate('2001-02-03T04:05:06.007', tz), new Date(2001, 1, 3, 4, 5, 6, 7), '2001-02-03T04:05:06.007');
deepEqual(parseISODate('2001-02-03T04:05Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05Z');
deepEqual(parseISODate('2001-02-03T04:05:06Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06Z');
deepEqual(parseISODate('2001-02-03T04:05:06.007Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007Z');
});
});
it('date-time (tz = null / local)', function () {
var tz: any = null;
deepEqual(parseISODate('2001-02-03T04:05', tz), new Date(2001, 1, 3, 4, 5, 0, 0), '2001-02-03T04:05');
deepEqual(parseISODate('2001-02-03T04:05:06', tz), new Date(2001, 1, 3, 4, 5, 6, 0), '2001-02-03T04:05:06');
deepEqual(parseISODate('2001-02-03T04:05:06.007', tz), new Date(2001, 1, 3, 4, 5, 6, 7), '2001-02-03T04:05:06.007');
describe('parseInterval', () => {
deepEqual(parseISODate('2001-02-03T04:05Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 0, 0)), '2001-02-03T04:05Z');
deepEqual(parseISODate('2001-02-03T04:05:06Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 0)), '2001-02-03T04:05:06Z');
deepEqual(parseISODate('2001-02-03T04:05:06.007Z', tz), new Date(Date.UTC(2001, 1, 3, 4, 5, 6, 7)), '2001-02-03T04:05:06.007Z');
it('errors on bad start', () => {
expect(() => {
parseInterval('2001-02-03T03:05:06.wdf007Z/2001-02-03T04:05:06.007Z');
}).to.throw("can not parse '2001-02-03T03:05:06.wdf007Z' as ISO date")
});
it('errors on bad end', () => {
expect(() => {
parseInterval('2001-02-03T03:05:06.007Z/2001-02-03T04:0ada5:06.007Z');
}).to.throw("can not parse '2001-02-03T04:0ada5:06.007Z' as ISO date")
});
it('errors on bad duration', () => {
expect(() => {
parseInterval('P1poop');
}).to.throw("Can not parse duration 'P1poop'")
});
it('errors on flipped start end', () => {
expect(() => {
parseInterval('2001-02-03T07:05:06.007Z/2001-02-03T04:05:06.007Z');
}).to.throw("start must be <= end in '2001-02-03T07:05:06.007Z/2001-02-03T04:05:06.007Z'")
});
/*
Has to be one of:
[start]/[end]
[start]/[duration]
[duration]/[end]
[duration]
*/
it('works with [start]/[end]', () => {
var tz = Timezone.UTC;
var interval = parseInterval('2001-02-03T03:05:06.007Z/2001-02-03T04:05:06.007Z', tz);
expect(interval.computedStart).to.deep.equal(new Date('2001-02-03T03:05:06.007Z'));
expect(interval.computedEnd).to.deep.equal(new Date('2001-02-03T04:05:06.007Z'));
});
it('works with [start]/[duration]', () => {
var tz = Timezone.UTC;
var interval = parseInterval('2001-02-03T03:05:06.007Z/PT1H', tz);
expect(interval.computedStart).to.deep.equal(new Date('2001-02-03T03:05:06.007Z'));
expect(interval.computedEnd).to.deep.equal(new Date('2001-02-03T04:05:06.007Z'));
});
it('works with [duration]/[end]', () => {
var tz = Timezone.UTC;
var interval = parseInterval('PT1H/2001-02-03T04:05:06.007Z', tz);
expect(interval.computedStart).to.deep.equal(new Date('2001-02-03T03:05:06.007Z'));
expect(interval.computedEnd).to.deep.equal(new Date('2001-02-03T04:05:06.007Z'));
});
it('works with [duration]', () => {
var now = new Date('2001-02-03T04:05:06.007Z');
var tz = Timezone.UTC;
var interval = parseInterval('PT1H', tz, now);
expect(interval.computedStart).to.deep.equal(new Date('2001-02-03T03:05:06.007Z'));
expect(interval.computedEnd).to.deep.equal(new Date('2001-02-03T04:05:06.007Z'));
});
});
});

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc