JavaScript LocaleDateString обратно к объекту Date

ВВЕДЕНИЕ

У меня есть компонент DatePicker, который возвращает объект JS Native Date. Когда пользователь выбирает дату, я автоматически конвертирую ее в строку даты локали, просто чтобы сделать ее видимой при вводе текста. Каждый ввод текста в моем приложении имеет функцию getText() для получения их значений... поэтому мне нужно получить эту строку даты локали и преобразовать ее обратно в собственный объект js Date.

Это должно работать для каждой страны.

Вот представление того, что я пытаюсь сделать:

ПРОБЛЕМА

Я попытался сделать новую дату (localeDateStr), но не работает должным образом, потому что объект Date не принимает форматы даты, такие как "ДД / ММ / ГГГГ". Есть идеи, как с этим справиться?

Буду очень признателен за вашу помощь. Спасибо.

Pd: Я использую js-joda и собственные методы даты из JS. Также, фреймворк React.

JS-Joda имеет метод "LocaleDate.parse(dateStr)", который принимает строку типа "мм-дд-гггг", поэтому он не работает для моего варианта использования.

2 ответа

Решение

В d объект может хранить оба значения, которые могут быть получены toString() а также valueOf() методы, что-то вроде:

d = {
toString(): d.toLocaleDateString(),
valueOf(): d.getTime()
}

Для представления / визуализации - toString() будет называться неявным, для математического - valueOf(). Вы можете, например, умножитьd на 1 перед отправкой через API

Преобразуйте LocaleDateString обратно в Date в JavaScript:

Я объяснил преобразование без использования moment.js в javascript.

1. Для строкового формата "ДД/ММ/ГГГГ"

      String date="24/06/2022";
var arr = date.split("/");
let dateObj= new Date(parseInt(arr[2]);
parseInt(arr[1]),parseInt(arr[0])); //new Date(int year,int Month,int day)

2. Для строкового формата "МММ-гггг"

      String date="Aug-2021";  
var arr = reviewDate.split("-");  
var months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
let month = months.indexOf(arr[0].toLowerCase());
let dateObj= new Date(parseInt(arr[1]), month);

Код ниже работает только для преобразования строки, которая соответствует стандартам ISO 8601, например ГГГГ-ММ-ДД или ГГГГ/ММ/ДД, иначе она печатается как недопустимая дата.

let dateObj=new Date("");

Другие вопросы по тегам