Search code examples
javascriptreactjsdatedate-fns

Is there a way to reverse a format in date-fns?


I am from Thailand, and wondering is there a way to reverse a format in date-fns?

For example, this function will turn "2022-09-24" to "saturday-24-september-2564"

This there a good method using date-fns to create a new function that will turn "saturday-9-september-2564" back to "2022-09-24"?

Thank you so much in advance

//----------------

import format from "date-fns/format";
import th from "date-fns/locale/th";
import addYears from "date-fns/addYears";

const transformDate = (d) => {
        const newDate = new Date(d);
        const year_ymd = addYears(newDate, 543);

        const urlText =
          format(newDate, "EEEE'-'d'-'MMMM") + format(year_ymd, "'-'yyyy");

        return urlText.toLowerCase();
      };

transformDate(2022-09-24);

Solution

  • Just the other way around it would be something like this if I'm not mistaken:

    import {format, addYears, parse} from "date-fns";
    import {th} from "date-fns/locale/th";
    
    const transformDate = (d) => {
            const newDate = new Date(d);
            const year_ymd = addYears(newDate, 543);
    
            const urlText =
              format(newDate, "EEEE'-'d'-'MMMM") + format(year_ymd, "'-'yyyy");
    
            console.log(urlText.toLowerCase());
          };
    
    transformDate('2022-09-24');
    
    const transformDate2 = (d) => {
      const parsed = parse(d, "EEEE'-'d'-'MMMM'-'yyyy", new Date(), { locale: th })
      const formatted = format(parsed, 'dd-MM-yyyy');
      console.log(formatted)
    }
    
    transformDate2('saturday-24-september-2565')
    

    Also, 4th param in the parsemethod contains optional properties that could be passed. In case you need anything more feel free to refference this picture:

    enter image description here