remix-demo

react router (remix) demo

git clone https://9o.is/git/remix-demo.git

date.ts

(1583B)


      1 const monthNumber: {
      2   [index: string]: string;
      3 } = {
      4   Jan: "01",
      5   Feb: "02",
      6   Mar: "03",
      7   Apr: "04",
      8   May: "05",
      9   Jun: "06",
     10   Jul: "07",
     11   Aug: "08",
     12   Sep: "09",
     13   Oct: "10",
     14   Nov: "11",
     15   Dec: "12",
     16 };
     17 
     18 const monthToName: {
     19   [index: string]: string;
     20 } = {
     21   Jan: "January",
     22   Feb: "February",
     23   Mar: "March",
     24   Apr: "April",
     25   May: "May",
     26   Jun: "June",
     27   Jul: "July",
     28   Aug: "August",
     29   Sep: "September",
     30   Oct: "October",
     31   Nov: "November",
     32   Dec: "December",
     33 };
     34 
     35 interface ParsedDate {
     36   year: string;
     37   month: string;
     38   monthNumber: string;
     39   day: string;
     40   hour: string;
     41   minute: string;
     42 }
     43 
     44 function parse(date: Date): ParsedDate | null {
     45   const pattern = /^\w{3} (\w{3}) (\d{2}) (\d{4}) (\d{2}):(\d{2})/;
     46   const result = date.toString().match(pattern);
     47 
     48   if (!result) return null;
     49   const [, month, day, year, hour, minute] = result;
     50 
     51   return {
     52     year,
     53     month: monthToName[month],
     54     day,
     55     hour,
     56     minute,
     57     monthNumber: monthNumber[month],
     58   };
     59 }
     60 
     61 export function formatDateWithoutTime(date: Date): string | null {
     62   const parsed = parse(date);
     63   if (!parsed) return null;
     64   return `${parsed.month} ${parsed.day}, ${parsed.year}`;
     65 }
     66 
     67 export function formatReadableDateTime(date: Date): string | null {
     68   const parsed = parse(date);
     69   if (!parsed) return null;
     70   return `${parsed.month} ${parsed.day} at ${parsed.hour}:${parsed.minute}`;
     71 }
     72 
     73 export function formatDateTime(date: Date): string {
     74   const parsed = parse(date);
     75   if (!parsed) return "";
     76   return `${parsed.year}-${parsed.monthNumber}-${parsed.day}T${parsed.hour}:${parsed.minute}`;
     77 }