stimulsoft-forms
Version:
Stimulsoft PDF Forms
639 lines (567 loc) • 80.9 kB
JavaScript
import { TimeSpan } from "./TimeSpan";
export class DateTime {
// Number of 100ns ticks per time unit
static { this.ticksPerMillisecond = 1000; }
static { this.ticksPerSecond = DateTime.ticksPerMillisecond * 1000; }
static { this.ticksPerMinute = DateTime.ticksPerSecond * 60; }
static { this.ticksPerHour = DateTime.ticksPerMinute * 60; }
static { this.ticksPerDay = DateTime.ticksPerHour * 24; }
// Number of milliseconds per time unit
static { this.millisPerSecond = 1000; }
static { this.millisPerMinute = DateTime.millisPerSecond * 60; }
static { this.millisPerHour = DateTime.millisPerMinute * 60; }
static { this.millisPerDay = DateTime.millisPerHour * 24; }
// Number of days in a non-leap year
static { this.daysPerYear = 365; }
// Number of days in 4 years
static { this.daysPer4Years = DateTime.daysPerYear * 4 + 1; }
// Number of days in 100 years
static { this.daysPer100Years = DateTime.daysPer4Years * 25 - 1; }
// Number of days in 400 years
static { this.daysPer400Years = DateTime.daysPer100Years * 4 + 1; }
// Number of days from 1/1/0001 to 12/31/1600
static { this.daysTo1601 = DateTime.daysPer400Years * 4; }
// Number of days from 1/1/0001 to 12/30/1899
static { this.daysTo1899 = DateTime.daysPer400Years * 4 + DateTime.daysPer100Years * 3 - 367; }
// Number of days from 1/1/0001 to 12/31/9999
static { this.daysTo10000 = DateTime.daysPer400Years * 25 - 366; }
static { this.minTicks = 0; }
static { this.maxTicks = DateTime.daysTo10000 * DateTime.ticksPerDay - 1; }
static { this.maxMillis = DateTime.daysTo10000 * DateTime.millisPerDay; }
static { this.fileTimeOffset = DateTime.daysTo1601 * DateTime.ticksPerDay; }
static { this.doubleDateOffset = DateTime.daysTo1899 * DateTime.ticksPerDay; }
// The minimum OA date is 0100/01/01 (Note it's year 100).
// The maximum OA date is 9999/12/31
static { this.oADateMinAsTicks = (DateTime.daysPer100Years - DateTime.daysPerYear) * DateTime.ticksPerDay; }
// All OA dates must be greater than (not >=) OADateMinAsDouble
static { this.oADateMinAsDouble = -657435; }
// All OA dates must be less than (not <=) OADateMaxAsDouble
static { this.oADateMaxAsDouble = 2958466; }
static { this.datePartYear = 0; }
static { this.datePartDayOfYear = 1; }
static { this.datePartMonth = 2; }
static { this.DatePartDay = 3; }
static { this.daysToMonth365 = [
0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
]; }
static { this.daysToMonth366 = [
0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366
]; }
static { this.minValue = new DateTime(DateTime.minTicks); }
static { this.maxValue = new DateTime(DateTime.maxTicks); }
static getNetTypeName() {
return "System.DateTime";
}
get year() {
return this.innerDate.getFullYear();
}
get month() {
return this.innerDate.getMonth() + 1;
}
/*get monthName(): string {
return CultureInfo.currentCulture.dateTimeFormat.monthNames[this.month - 1];
}
get monthGenitiveName(): string {
return CultureInfo.currentCulture.dateTimeFormat.monthGenitiveNames[this.month - 1];
}
get monthShortName(): string {
return CultureInfo.currentCulture.dateTimeFormat.abbreviatedMonthNames[this.month - 1];
}*/
get day() {
return this.innerDate.getDate();
}
/** 0 – Sunday, 1 – Monday etc */
get dayOfWeek() {
return this.innerDate.getDay();
}
/*get dayName(): string {
return CultureInfo.currentCulture.dateTimeFormat.dayNames[this.dayOfWeek];
}
get dayShortName(): string {
return CultureInfo.currentCulture.dateTimeFormat.shortestDayNames[this.dayOfWeek];
}*/
get hour() {
return this.innerDate.getHours();
}
get minute() {
return this.innerDate.getMinutes();
}
get second() {
return this.innerDate.getSeconds();
}
get millisecond() {
return this.innerDate.getMilliseconds();
}
get ticks() {
return this.innerDate.getTime();
}
get dayOfYear() {
let oneJan = new Date(this.innerDate.getFullYear(), 0, 1);
let diff = this.innerDate.getTime() - oneJan.getTime();
return Math.ceil(diff / 86400000) + 1;
}
/*firstDayOfWeek(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs(this.innerDate);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.startOf("week").toDate());
}
lastDayOfWeek(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs(this.innerDate);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.endOf("week").toDate());
}
firstDayOfMonth(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs(this.innerDate);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.startOf("month").toDate());
}
lastDayOfMonth(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs(this.innerDate);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.endOf("month").toDate());
}
firstDayOfQuarter(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs(this.innerDate);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.startOf("quarter").toDate());
}
lastDayOfQuarter(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs(this.innerDate);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.endOf("quarter").toDate());
}
firstDayOfFirthQuarter(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs().month(0);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.startOf("quarter").toDate());
}
lastDayOfFirthQuarter(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs().month(0);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.endOf("quarter").toDate());
}
firstDayOfSecondQuarter(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs().month(3);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.startOf("quarter").toDate());
}
lastDayOfSecondQuarter(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs().month(3);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.endOf("quarter").toDate());
}
firstDayOfThirdQuarter(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs().month(6);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.startOf("quarter").toDate());
}
lastDayOfThirdQuarter(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs().month(6);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.endOf("quarter").toDate());
}
firstDayOfFourthQuarter(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs().month(9);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.startOf("quarter").toDate());
}
lastDayOfFourthQuarter(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs().month(9);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.endOf("quarter").toDate());
}
firstDayOfYear(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs(this.innerDate);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.startOf("year").toDate());
}
lastDayOfYear(): DateTime {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs(this.innerDate);
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
return new DateTime(dayjsDate.endOf("year").toDate());
}
toShortDateString(): string {
return this.toString(CultureInfo.currentCulture.dateTimeFormat.shortDatePattern);
}
toShortTimeString(): string {
return this.toString(CultureInfo.currentCulture.dateTimeFormat.shortTimePattern);
}*/
static now() {
return new DateTime(new Date());
}
static today() {
let today = new DateTime(new Date());
return new DateTime(today.year, today.month, today.day, 0, 0, 0, 0);
}
static isLeapYear(year) {
return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
}
/** The month number ranging from 1 to 12. JS calculate month from 0. This will even work for December. */
static daysInMonth(year, month) {
return 33 - new Date(year, month - 1, 33).getDate();
}
static compare(t1, t2) {
if (t1.ticks < t2.ticks)
return -1;
if (t1.ticks > t2.ticks)
return 1;
return 0;
}
static doubleDateToTicks(value) {
if (value >= this.oADateMaxAsDouble || value <= this.oADateMinAsDouble)
return null;
let millis = (value * this.millisPerDay + (value >= 0 ? 0.5 : -0.5));
// The interesting thing here is when you have a value like 12.5 it all positive 12 days and 12 hours from 01/01/1899
// However if you a value of -12.25 it is minus 12 days but still positive 6 hours, almost as though you meant -11.75 all negative
// This line below fixes up the millis in the negative case
if (millis < 0) {
millis -= (millis % this.millisPerDay) * 2;
}
millis += this.doubleDateOffset / this.ticksPerMillisecond;
if (millis < 0 || millis >= this.maxMillis)
return null;
return millis * this.ticksPerMillisecond;
}
// private static ticksToOADate(value: number): number {
// //The time value for the date 1899-12-30 is -2209197600000 milliseconds
// let millis: number = (value + 2209197600000) / this.ticksPerMillisecond;
// if (millis < 0) {
// let frac: number = millis % this.millisPerDay;
// if (frac != 0) millis -= (this.millisPerDay + frac) * 2;
// }
// return millis / this.millisPerDay * 1000;
// }
toString(format = "G") {
/*let dayjsDate = Stimulsoft.ExternalLibrary.dayjs(this.innerDate);
if (!dayjsDate.isValid()) return "";
dayjsDate = dayjsDate.locale(`sti_${CultureInfo.currentCulture.name}`);
LT: culture.dateTimeFormat.shortTimePattern,
LTS: culture.dateTimeFormat.longTimePattern,
L: culture.dateTimeFormat.shortDatePattern,
LLL: culture.dateTimeFormat.longDatePattern,
LLLL: culture.dateTimeFormat.fullDateTimePattern
t ShortTimePattern h:mm tt LT: "h:mm A",
T LongTimePattern h:mm:ss tt LTS: "h:mm:ss A",
d ShortDatePattern M/d/yyyy L: "M/D/YYYY",
D LongDatePattern dddd, MMMM dd, yyyy LLL: "MMMM Do YYYY",
f (combination of D and t) dddd, MMMM dd, yyyy h:mm tt
F FullDateTimePattern dddd, MMMM dd, yyyy h:mm:ss tt LLLL: "dddd, MMMM Do YYYY LT",
g (combination of d and t) M/d/yyyy h:mm tt
G (combination of d and T) M/d/yyyy h:mm:ss tt
*/
/*switch (format) {
case "t":
format = CultureInfo.currentCulture.dateTimeFormat.shortTimePattern;
break;
case "T":
format = CultureInfo.currentCulture.dateTimeFormat.longTimePattern;
break;
case "d":
format = CultureInfo.currentCulture.dateTimeFormat.shortDatePattern;
break;
case "D":
format = CultureInfo.currentCulture.dateTimeFormat.longDatePattern;
break;
case "f":
format = CultureInfo.currentCulture.dateTimeFormat.longDatePattern + " " + CultureInfo.currentCulture.dateTimeFormat.shortTimePattern;
break;
case "F":
format = CultureInfo.currentCulture.dateTimeFormat.fullDateTimePattern;
break;
case "g":
format = CultureInfo.currentCulture.dateTimeFormat.shortDatePattern + " " + CultureInfo.currentCulture.dateTimeFormat.shortTimePattern;
break;
case "G":
format = CultureInfo.currentCulture.dateTimeFormat.shortDatePattern + " " + CultureInfo.currentCulture.dateTimeFormat.longTimePattern;
break;
case "y":
case "Y":
format = CultureInfo.currentCulture.dateTimeFormat.yearMonthPattern;
break;
case "s":
format = "yyyy-MM-dd\\THH:mm:ss";
break;// ISO
case "u":
format = "yyyy-MM-dd HH:mm:ss\\Z";
break;// ISO
case "m":
case "M": // MonthDayPattern;
format = CultureInfo.currentCulture.name.ss.contains("en") || CultureInfo.currentCulture.name.ss.contains("us") ? "MMMM d" : "d MMMM";
break;
case "r":
case "R": // The RFC1123 Format Specifier
format = "ddd, dd MMM yyyy HH\\:mm\\:ss \\G\\M\\T";
break;
}*/
format = format.replace(/d/gm, "D").replace(/DDDD/gm, "dddd").replace(/DDD/gm, "ddd");
format = format.replace(/y/gm, "Y");
format = format.replace(/f/gm, "S").replace(/F/gm, "S");
format = format.replace(/tt/gm, "A").replace(/t/gm, "A");
format = format.replace(/zzz/gm, "Z").replace(/zz/gm, "Z").replace(/z/gm, "Z");
return format + this.DateTimeOffset;
}
static ticksNetToTicksJs(ticks) {
// ticks are in nanotime; convert to microtime
let ticksToMicrotime = ticks / 10000;
// ticks are recorded from 1/1/1; get microtime difference from 1/1/1/ to 1/1/1970
let epochMicrotimeDiff = 62135607600000; // Math.abs(new Date(0, 0, 1).setFullYear(1))
return ticksToMicrotime - epochMicrotimeDiff;
}
negate() {
if (this.ticks == TimeSpan.minValue().ticks)
throw new Error("Overflow_NegateTwosCompNum");
return new DateTime(-this.ticks);
}
addYears(value) {
return new DateTime(this.year + value, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);
}
addMonths(value) {
let newMonth = this.month + value;
let newYear = this.year;
if (newMonth < 1) {
newYear--;
newMonth = 12 + newMonth;
}
return new DateTime(newYear, newMonth, this.day, this.hour, this.minute, this.second, this.millisecond);
}
/*addDays(value: number): DateTime {
let newDate: DateTime = new DateTime(this.innerDate.getTime());
let newDay = newDate.day + value;
if (newDay < 1) {
newDate = newDate.addMonths(-1);
newDay = newDate.lastDayOfMonth().day + newDay;
}
return new DateTime(newDate.year, newDate.month, newDay, newDate.hour, newDate.minute, newDate.second, newDate.millisecond);
}*/
addHours(value) {
return new DateTime(this.year, this.month, this.day, this.hour + value, this.minute, this.second, this.millisecond);
}
addMinutes(value) {
return new DateTime(this.year, this.month, this.day, this.hour, this.minute + value, this.second, this.millisecond);
}
addSeconds(value) {
return new DateTime(this.year, this.month, this.day, this.hour, this.minute, this.second + value, this.millisecond);
}
addMilliseconds(value) {
return new DateTime(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond + value);
}
addTicks(value) {
return new DateTime(this.ticks + value);
}
compareTo(value) {
if (this.ticks < value.ticks)
return -1;
if (this.ticks > value.ticks)
return 1;
return 0;
}
subtract(value) {
return new TimeSpan(this.ticks - value.ticks);
}
get date() {
return this.innerDate;
}
static oaDateToTicks0(oaDate) {
let ticks = ((oaDate - 25569) * 86400000);
if (oaDate < 0) {
const frac = (oaDate - Math.trunc(oaDate)) * 86400000;
if (frac !== 0) {
ticks -= frac * 2;
}
}
return ticks;
}
static ticksToOADate0(ticks) {
let oad = (ticks / 86400000) + 25569;
if (oad < 0) {
const frac = oad - Math.trunc(oad);
if (frac !== 0) {
oad = Math.ceil(oad) - frac - 2;
}
}
return oad;
}
toOADate() {
//return (this.ticks / 86400000) + 25569;
return DateTime.ticksToOADate0(this.ticks);
}
toOADate2(round) {
let ticks = DateTime.ticksToOADate0(this.ticks);
//let ticks = DateTime.ticksToOADate(this.ticks);
if (round)
return Math.round(ticks);
return ticks;
}
toNetJsonString() {
return "\\/Date(" + this.ticks.toString() + ")\\/";
}
static fromNetJsonString(jsonDate) {
let m = /-?\d+/.exec(jsonDate);
let date = new Date(parseInt(m[0]));
return new DateTime(date);
}
static fromOADate(oadate) {
return new DateTime(DateTime.oaDateToTicks0(oadate));
//return new DateTime(((oadate - 25569) * 86400000));
// return new DateTime(this.doubleDateToTicks(d));
}
static fromString(d = "2015-12-31", logError = true) {
try {
d = d.trim();
let date = d.split(".").join("-").split("\\").join("-").split(" ").join("-");
return new DateTime(new Date());
let dayjsDate;
/*if (date.indexOf("/") >= 0) {
// Date
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "M/D/YYYY", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "M/D/YY", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
// DateTime
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "M/D/YYYY-H:m", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "M/D/YYYY-H:m:s", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "M/D/YYYY-h:m:s-a", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "M/D/YY-H:m", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "M/D/YY-H:m:s", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "M/D/YY-h:m:s-a", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
date = d.split("/").join("-");
}
// Date
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-M-D", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "D-M-YYYY", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "D-M-YY", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
// DateTime
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-M-D-H:m", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-M-D-H:m:s", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-M-D-H:m:s-SSS", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-M-D-H:m:s-SSSSSSS", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-M-D-h:m:s-a", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "D-M-YYYY-H:m", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "D-M-YYYY-H:m:s", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "D-M-YYYY-h:m:s-a", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "D-M-YY-H:m", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "D-M-YY-H:m:s", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "D-M-YY-h:m:s-a", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
// Time
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "H:m", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "H:m:s", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "h:m:s-a", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
// ISO
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-MM-DD", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-MM-DDTHH:m:sZ", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-MM-DDTHH:m:s-SSSZ", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-MM-DDTHH:m:s-SSSSSSSZ", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-MM-DDTHH:m:s", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-MM-DDTHH:m:s-SSS", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(date, "YYYY-MM-DDTHH:m:s-SSSSSSS", true);
if (dayjsDate.isValid()) return new DateTime(dayjsDate.toDate());
if (logError) StiError.showError("Parse DateTime Error (" + d + ")", false);*/
return null;
}
catch (e) {
return null;
}
}
/*
static fromString2(format = "2015-12-31", value: string, logError = true): DateTime {
try {
let dayjsDate = Stimulsoft.ExternalLibrary.dayjs(value, [format], true);
if (dayjsDate.isValid() == false) {
if (logError) StiError.showError("Parse DateTime Error (" + value + ")", false);
return null;
}
return new DateTime(dayjsDate.toDate());
}
catch (e) {
}
return null;
}
static isISO8601String(d: string): boolean {
try {
d = d.trim();
let dayjsDate;
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(d, "YYYY-MM-DD", true);
if (dayjsDate.isValid()) return true;
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(d, "YYYY-MM-DDTHH:mm", true);
if (dayjsDate.isValid()) return true;
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(d, "YYYY-MM-DDTHH:mmZ", true);
if (dayjsDate.isValid()) return true;
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(d, "YYYY-MM-DDTHH:mm:ss", true);
if (dayjsDate.isValid()) return true;
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(d, "YYYY-MM-DDTHH:mm:ss.SSS", true);
if (dayjsDate.isValid()) return true;
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(d, "YYYY-MM-DDTHH:mm:ss.SSSSSS", true);
if (dayjsDate.isValid()) return true;
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(d, "YYYY-MM-DDTHH:mm:ssZ", true);
if (dayjsDate.isValid()) return true;
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(d, "YYYY-MM-DDTHH:mm:ss.SSSZ", true);
if (dayjsDate.isValid()) return true;
dayjsDate = Stimulsoft.ExternalLibrary.dayjs(d, "YYYY-MM-DDTHH:mm:ss.SSSSSSZ", true);
if (dayjsDate.isValid()) return true;
}
catch (e) {
}
return false;
}*/
get timeOfDay() {
return new TimeSpan(this.ticks - new DateTime(this.year, this.month, this.day, 0, 0, 0, 0).ticks);
}
get date2() {
return new DateTime(this.year, this.month, this.day, 0, 0, 0, 0);
}
constructor(param1, month, day, hour, minute, second, millisecond) {
this.DateTimeOffset = "";
if (typeof param1 == "undefined") {
this.innerDate = new Date();
}
else if (typeof param1 != "number" && param1 instanceof Date) {
this.innerDate = param1; // set date
}
else {
if (!month) {
this.innerDate = new Date();
this.innerDate.setTime(param1); // set ticks
}
else {
this.innerDate = new Date();
this.innerDate.setFullYear(param1);
this.innerDate.setMonth(month - 1);
this.innerDate.setDate(day || 1);
this.innerDate.setHours(hour || 0);
this.innerDate.setMinutes(minute || 0);
this.innerDate.setSeconds(second || 0);
this.innerDate.setMilliseconds(millisecond || 0);
}
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZVRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdGltdWxzb2Z0LWZvcm1zL3NyYy9saWIvc3lzdGVtL0RhdGVUaW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdEMsTUFBTSxPQUFPLFFBQVE7SUFDbkIsc0NBQXNDO2FBQ3ZCLHdCQUFtQixHQUFHLElBQUksQUFBUCxDQUFRO2FBQzNCLG1CQUFjLEdBQVcsUUFBUSxDQUFDLG1CQUFtQixHQUFHLElBQUksQUFBOUMsQ0FBK0M7YUFDN0QsbUJBQWMsR0FBVyxRQUFRLENBQUMsY0FBYyxHQUFHLEVBQUUsQUFBdkMsQ0FBd0M7YUFDdEQsaUJBQVksR0FBVyxRQUFRLENBQUMsY0FBYyxHQUFHLEVBQUUsQUFBdkMsQ0FBd0M7YUFDcEQsZ0JBQVcsR0FBVyxRQUFRLENBQUMsWUFBWSxHQUFHLEVBQUUsQUFBckMsQ0FBc0M7SUFFaEUsdUNBQXVDO2FBQ3hCLG9CQUFlLEdBQUcsSUFBSSxBQUFQLENBQVE7YUFDdkIsb0JBQWUsR0FBVyxRQUFRLENBQUMsZUFBZSxHQUFHLEVBQUUsQUFBeEMsQ0FBeUM7YUFDeEQsa0JBQWEsR0FBVyxRQUFRLENBQUMsZUFBZSxHQUFHLEVBQUUsQUFBeEMsQ0FBeUM7YUFDdEQsaUJBQVksR0FBVyxRQUFRLENBQUMsYUFBYSxHQUFHLEVBQUUsQUFBdEMsQ0FBdUM7SUFFbEUsb0NBQW9DO2FBQ3JCLGdCQUFXLEdBQUcsR0FBRyxBQUFOLENBQU87SUFDakMsNEJBQTRCO2FBQ2Isa0JBQWEsR0FBVyxRQUFRLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLEFBQXZDLENBQXdDO0lBQ3BFLDhCQUE4QjthQUNmLG9CQUFlLEdBQVcsUUFBUSxDQUFDLGFBQWEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxBQUExQyxDQUEyQztJQUN6RSw4QkFBOEI7YUFD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QUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVk7WUFDOUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF5T2ZXZWVrIH0gZnJvbSBcIi4vZW51bXNcIjtcclxuaW1wb3J0IHsgVGltZVNwYW4gfSBmcm9tIFwiLi9UaW1lU3BhblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIERhdGVUaW1lIHtcclxuICAvLyBOdW1iZXIgb2YgMTAwbnMgdGlja3MgcGVyIHRpbWUgdW5pdFxyXG4gIHByaXZhdGUgc3RhdGljIHRpY2tzUGVyTWlsbGlzZWNvbmQgPSAxMDAwO1xyXG4gIHByaXZhdGUgc3RhdGljIHRpY2tzUGVyU2Vjb25kOiBudW1iZXIgPSBEYXRlVGltZS50aWNrc1Blck1pbGxpc2Vjb25kICogMTAwMDtcclxuICBwcml2YXRlIHN0YXRpYyB0aWNrc1Blck1pbnV0ZTogbnVtYmVyID0gRGF0ZVRpbWUudGlja3NQZXJTZWNvbmQgKiA2MDtcclxuICBwcml2YXRlIHN0YXRpYyB0aWNrc1BlckhvdXI6IG51bWJlciA9IERhdGVUaW1lLnRpY2tzUGVyTWludXRlICogNjA7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgdGlja3NQZXJEYXk6IG51bWJlciA9IERhdGVUaW1lLnRpY2tzUGVySG91ciAqIDI0O1xyXG5cclxuICAvLyBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHBlciB0aW1lIHVuaXRcclxuICBwcml2YXRlIHN0YXRpYyBtaWxsaXNQZXJTZWNvbmQgPSAxMDAwO1xyXG4gIHByaXZhdGUgc3RhdGljIG1pbGxpc1Blck1pbnV0ZTogbnVtYmVyID0gRGF0ZVRpbWUubWlsbGlzUGVyU2Vjb25kICogNjA7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWlsbGlzUGVySG91cjogbnVtYmVyID0gRGF0ZVRpbWUubWlsbGlzUGVyTWludXRlICogNjA7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWlsbGlzUGVyRGF5OiBudW1iZXIgPSBEYXRlVGltZS5taWxsaXNQZXJIb3VyICogMjQ7XHJcblxyXG4gIC8vIE51bWJlciBvZiBkYXlzIGluIGEgbm9uLWxlYXAgeWVhclxyXG4gIHByaXZhdGUgc3RhdGljIGRheXNQZXJZZWFyID0gMzY1O1xyXG4gIC8vIE51bWJlciBvZiBkYXlzIGluIDQgeWVhcnNcclxuICBwcml2YXRlIHN0YXRpYyBkYXlzUGVyNFllYXJzOiBudW1iZXIgPSBEYXRlVGltZS5kYXlzUGVyWWVhciAqIDQgKyAxO1xyXG4gIC8vIE51bWJlciBvZiBkYXlzIGluIDEwMCB5ZWFyc1xyXG4gIHByaXZhdGUgc3RhdGljIGRheXNQZXIxMDBZZWFyczogbnVtYmVyID0gRGF0ZVRpbWUuZGF5c1BlcjRZZWFycyAqIDI1IC0gMTtcclxuICAvLyBOdW1iZXIgb2YgZGF5cyBpbiA0MDAgeWVhcnNcclxuICBwcml2YXRlIHN0YXRpYyBkYXlzUGVyNDAwWWVhcnM6IG51bWJlciA9IERhdGVUaW1lLmRheXNQZXIxMDBZZWFycyAqIDQgKyAxO1xyXG5cclxuICAvLyBOdW1iZXIgb2YgZGF5cyBmcm9tIDEvMS8wMDAxIHRvIDEyLzMxLzE2MDBcclxuICBwcml2YXRlIHN0YXRpYyBkYXlzVG8xNjAxOiBudW1iZXIgPSBEYXRlVGltZS5kYXlzUGVyNDAwWWVhcnMgKiA0O1xyXG4gIC8vIE51bWJlciBvZiBkYXlzIGZyb20gMS8xLzAwMDEgdG8gMTIvMzAvMTg5OVxyXG4gIHByaXZhdGUgc3RhdGljIGRheXNUbzE4OTk6IG51bWJlciA9IERhdGVUaW1lLmRheXNQZXI0MDBZZWFycyAqIDQgKyBEYXRlVGltZS5kYXlzUGVyMTAwWWVhcnMgKiAzIC0gMzY3O1xyXG4gIC8vIE51bWJlciBvZiBkYXlzIGZyb20gMS8xLzAwMDEgdG8gMTIvMzEvOTk5OVxyXG4gIHByaXZhdGUgc3RhdGljIGRheXNUbzEwMDAwOiBudW1iZXIgPSBEYXRlVGltZS5kYXlzUGVyNDAwWWVhcnMgKiAyNSAtIDM2NjtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWluVGlja3MgPSAwO1xyXG4gIHByaXZhdGUgc3RhdGljIG1heFRpY2tzOiBudW1iZXIgPSBEYXRlVGltZS5kYXlzVG8xMDAwMCAqIERhdGVUaW1lLnRpY2tzUGVyRGF5IC0gMTtcclxuICBwcml2YXRlIHN0YXRpYyBtYXhNaWxsaXM6IG51bWJlciA9IERhdGVUaW1lLmRheXNUbzEwMDAwICogRGF0ZVRpbWUubWlsbGlzUGVyRGF5O1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBmaWxlVGltZU9mZnNldDogbnVtYmVyID0gRGF0ZVRpbWUuZGF5c1RvMTYwMSAqIERhdGVUaW1lLnRpY2tzUGVyRGF5O1xyXG4gIHByaXZhdGUgc3RhdGljIGRvdWJsZURhdGVPZmZzZXQ6IG51bWJlciA9IERhdGVUaW1lLmRheXNUbzE4OTkgKiBEYXRlVGltZS50aWNrc1BlckRheTtcclxuICAvLyBUaGUgbWluaW11bSBPQSBkYXRlIGlzIDAxMDAvMDEvMDEgKE5vdGUgaXQncyB5ZWFyIDEwMCkuXHJcbiAgLy8gVGhlIG1heGltdW0gT0EgZGF0ZSBpcyA5OTk5LzEyLzMxXHJcbiAgcHJpdmF0ZSBzdGF0aWMgb0FEYXRlTWluQXNUaWNrczogbnVtYmVyID0gKERhdGVUaW1lLmRheXNQZXIxMDBZZWFycyAtIERhdGVUaW1lLmRheXNQZXJZZWFyKSAqIERhdGVUaW1lLnRpY2tzUGVyRGF5O1xyXG4gIC8vIEFsbCBPQSBkYXRlcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAobm90ID49KSBPQURhdGVNaW5Bc0RvdWJsZVxyXG4gIHByaXZhdGUgc3RhdGljIG9BRGF0ZU1pbkFzRG91YmxlID0gLTY1NzQzNTtcclxuICAvLyBBbGwgT0EgZGF0ZXMgbXVzdCBiZSBsZXNzIHRoYW4gKG5vdCA8PSkgT0FEYXRlTWF4QXNEb3VibGVcclxuICBwcml2YXRlIHN0YXRpYyBvQURhdGVNYXhBc0RvdWJsZSA9IDI5NTg0NjY7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGRhdGVQYXJ0WWVhciA9IDA7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZGF0ZVBhcnREYXlPZlllYXIgPSAxO1xyXG4gIHByaXZhdGUgc3RhdGljIGRhdGVQYXJ0TW9udGggPSAyO1xyXG4gIHByaXZhdGUgc3RhdGljIERhdGVQYXJ0RGF5ID0gMztcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZGF5c1RvTW9udGgzNjU6IG51bWJlcltdID0gW1xyXG4gICAgMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzQsIDM2NV07XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZGF5c1RvTW9udGgzNjY6IG51bWJlcltdID0gW1xyXG4gICAgMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzUsIDM2Nl07XHJcblxyXG4gIHN0YXRpYyBtaW5WYWx1ZTogRGF0ZVRpbWUgPSBuZXcgRGF0ZVRpbWUoRGF0ZVRpbWUubWluVGlja3MpO1xyXG4gIHN0YXRpYyBtYXhWYWx1ZTogRGF0ZVRpbWUgPSBuZXcgRGF0ZVRpbWUoRGF0ZVRpbWUubWF4VGlja3MpO1xyXG5cclxuICBzdGF0aWMgZ2V0TmV0VHlwZU5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBcIlN5c3RlbS5EYXRlVGltZVwiO1xyXG4gIH1cclxuXHJcbiAgRGF0ZVRpbWVPZmZzZXQgPSBcIlwiO1xyXG5cclxuICBwcml2YXRlIGlubmVyRGF0ZTogRGF0ZTtcclxuXHJcbiAgZ2V0IHllYXIoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmlubmVyRGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1vbnRoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5pbm5lckRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgfVxyXG5cclxuICAvKmdldCBtb250aE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBDdWx0dXJlSW5mby5jdXJyZW50Q3VsdHVyZS5kYXRlVGltZUZvcm1hdC5tb250aE5hbWVzW3RoaXMubW9udGggLSAxXTtcclxuICB9XHJcblxyXG4gIGdldCBtb250aEdlbml0aXZlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEN1bHR1cmVJbmZvLmN1cnJlbnRDdWx0dXJlLmRhdGVUaW1lRm9ybWF0Lm1vbnRoR2VuaXRpdmVOYW1lc1t0aGlzLm1vbnRoIC0gMV07XHJcbiAgfVxyXG5cclxuICBnZXQgbW9udGhTaG9ydE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBDdWx0dXJlSW5mby5jdXJyZW50Q3VsdHVyZS5kYXRlVGltZUZvcm1hdC5hYmJyZXZpYXRlZE1vbnRoTmFtZXNbdGhpcy5tb250aCAtIDFdO1xyXG4gIH0qL1xyXG5cclxuICBnZXQgZGF5KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5pbm5lckRhdGUuZ2V0RGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIDAg4oCTIFN1bmRheSwgMSDigJMgTW9uZGF5IGV0YyAqL1xyXG4gIGdldCBkYXlPZldlZWsoKTogRGF5T2ZXZWVrIHtcclxuICAgIHJldHVybiB0aGlzLmlubmVyRGF0ZS5nZXREYXkoKTtcclxuICB9XHJcblxyXG4gIC8qZ2V0IGRheU5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBDdWx0dXJlSW5mby5jdXJyZW50Q3VsdHVyZS5kYXRlVGltZUZvcm1hdC5kYXlOYW1lc1t0aGlzLmRheU9mV2Vla107XHJcbiAgfVxyXG5cclxuICBnZXQgZGF5U2hvcnROYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gQ3VsdHVyZUluZm8uY3VycmVudEN1bHR1cmUuZGF0ZVRpbWVGb3JtYXQuc2hvcnRlc3REYXlOYW1lc1t0aGlzLmRheU9mV2Vla107XHJcbiAgfSovXHJcblxyXG4gIGdldCBob3VyKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5pbm5lckRhdGUuZ2V0SG91cnMoKTtcclxuICB9XHJcblxyXG4gIGdldCBtaW51dGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmlubmVyRGF0ZS5nZXRNaW51dGVzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2Vjb25kKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5pbm5lckRhdGUuZ2V0U2Vjb25kcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1pbGxpc2Vjb25kKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5pbm5lckRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdGlja3MoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmlubmVyRGF0ZS5nZXRUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGF5T2ZZZWFyKCk6IG51bWJlciB7XHJcbiAgICBsZXQgb25lSmFuOiBEYXRlID0gbmV3IERhdGUodGhpcy5pbm5lckRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgMSk7XHJcbiAgICBsZXQgZGlmZiA9IHRoaXMuaW5uZXJEYXRlLmdldFRpbWUoKSAtIG9uZUphbi5nZXRUaW1lKCk7XHJcbiAgICByZXR1cm4gTWF0aC5jZWlsKGRpZmYgLyA4NjQwMDAwMCkgKyAxO1xyXG4gIH1cclxuXHJcbiAgLypmaXJzdERheU9mV2VlaygpOiBEYXRlVGltZSB7XHJcbiAgICBsZXQgZGF5anNEYXRlID0gU3RpbXVsc29mdC5FeHRlcm5hbExpYnJhcnkuZGF5anModGhpcy5pbm5lckRhdGUpO1xyXG4gICAgZGF5anNEYXRlID0gZGF5anNEYXRlLmxvY2FsZShgc3RpXyR7Q3VsdHVyZUluZm8uY3VycmVudEN1bHR1cmUubmFtZX1gKTtcclxuICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoZGF5anNEYXRlLnN0YXJ0T2YoXCJ3ZWVrXCIpLnRvRGF0ZSgpKTtcclxuICB9XHJcblxyXG4gIGxhc3REYXlPZldlZWsoKTogRGF0ZVRpbWUge1xyXG4gICAgbGV0IGRheWpzRGF0ZSA9IFN0aW11bHNvZnQuRXh0ZXJuYWxMaWJyYXJ5LmRheWpzKHRoaXMuaW5uZXJEYXRlKTtcclxuICAgIGRheWpzRGF0ZSA9IGRheWpzRGF0ZS5sb2NhbGUoYHN0aV8ke0N1bHR1cmVJbmZvLmN1cnJlbnRDdWx0dXJlLm5hbWV9YCk7XHJcbiAgICByZXR1cm4gbmV3IERhdGVUaW1lKGRheWpzRGF0ZS5lbmRPZihcIndlZWtcIikudG9EYXRlKCkpO1xyXG4gIH1cclxuXHJcbiAgZmlyc3REYXlPZk1vbnRoKCk6IERhdGVUaW1lIHtcclxuICA