UNPKG

stimulsoft-forms

Version:
639 lines (567 loc) 80.9 kB
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