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("");