All files / src interface.ts

0% Statements 0/20
0% Branches 0/18
0% Functions 0/3
0% Lines 0/20

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                                                                                           
import XDate from 'xdate';
 
interface DateData {
  year: number;
  month: number;
  day: number;
  timestamp: number;
  dateString: string;
}
 
function padNumber(n: number): string {
  if (n < 10) {
    return '0' + n;
  }
  return n.toString();
}
 
export function xdateToData(xdate: XDate): DateData {
  const dateString = xdate.toString('yyyy-MM-dd');
  return {
    year: xdate.getFullYear(),
    month: xdate.getMonth() + 1,
    day: xdate.getDate(),
    timestamp: XDate(dateString, true).getTime(),
    dateString: dateString
  };
}
 
export function parseDate(d?: number | string | Date | XDate | DateData): XDate | undefined {
  if (!d) {
    return undefined;
  } else if (typeof d === 'object' && 'timestamp' in d) { // conventional data timestamp
    return XDate(d.timestamp, true);
  } else if (d instanceof XDate) { // xdate
    return XDate(d.toString('yyyy-MM-dd'), true);
  } else if (d instanceof Date) { // javascript date
    const dateString = d.getFullYear() + '-' + padNumber((d.getMonth() + 1)) + '-' + padNumber(d.getDate());
    return XDate(dateString, true);
  } else if (typeof d === 'object' && 'year' in d) {
    const dateString = d.year + '-' + padNumber(d.month) + '-' + padNumber(d.day);
    return XDate(dateString, true);
  } else if (d) { // timestamp number or date formatted as string
    return XDate(d, true);
  }
  return undefined;
}