Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | 5x 5x 5x 5x 5x 72x 72x 72x 72x 72x 72x 26x 26x 72x 72x 72x 72x 72x 72x 8x 72x | import dayjs from "dayjs";
import localizedFormat from "dayjs/plugin/localizedFormat";
import { DateWithNum } from "./DateWithNum";
export class MHADates {
static {
dayjs.extend(localizedFormat);
}
// parse date using dayjs, with fallback to browser based parsing
public static parseDate(date: string): DateWithNum {
// Cross browser dates - ugh!
// http://dygraphs.com/date-formats.html
// Invert any backwards dates: 2018-01-28 -> 01-28-2018
// dayjs can handle these, but inverting manually makes it easier for the dash replacement
date = date.replace(/\s*(\d{4})-(\d{1,2})-(\d{1,2})/g, "$2/$3/$1");
// Replace dashes with slashes
date = date.replace(/\s*(\d{1,2})-(\d{1,2})-(\d{4})/g, "$1/$2/$3");
// If we don't have a +xxxx or -xxxx on our date, it will be interpreted in local time
// This likely isn't the intended timezone, so we add a +0000 to get UTC
const offset: RegExpMatchArray | null = date.match(/[+|-]\d{4}/);
const originalDate: string = date;
let offsetAdded = false;
if (!offset || offset.length !== 1) {
date += " +0000";
offsetAdded = true;
}
// Some browsers (firefox) don't like milliseconds in dates, and dayjs doesn't hide that from us
// Trim off milliseconds so we don't pass them into dayjs
const milliseconds: RegExpMatchArray | null = date.match(/\d{1,2}:\d{2}:\d{2}.(\d+)/);
date = date.replace(/(\d{1,2}:\d{2}:\d{2}).(\d+)/, "$1");
if (dayjs) {
// And now we can parse our date
let time: dayjs.Dayjs = dayjs(date);
// If adding offset didn't work, try adding time and offset
if (!time.isValid() && offsetAdded) { time = dayjs(originalDate + " 12:00:00 AM +0000"); }
if (milliseconds && milliseconds.length >= 2) {
time = time.add(Math.floor(parseFloat("0." + milliseconds[1]) * 1000), "ms");
}
return new DateWithNum(
time.valueOf(),
time.format("l LTS"));
}
else E{
let dateNum = Date.parse(date);
if (milliseconds && milliseconds.length >= 2) {
dateNum = dateNum + Math.floor(parseFloat("0." + milliseconds[1]) * 1000);
}
return new DateWithNum(
dateNum,
new Date(dateNum).toLocaleString().replace(/\u200E|,/g, ""));
}
}
}
|