Собственный метод для обратного преобразования Date.toLocaleString в JavaScript? - PullRequest
0 голосов
/ 20 мая 2018

Дата конвертирована в locale string.Например:

x = (new Date()).toLocaleString()

и x имеет значение

"20.05.2018, 10:21:37"

Как обработать эту строку для Date объекта.

Я пытался

new Date(x)
Invalid Date

и

Date.parse(x)
NaN

Можно и просто обойтись без внешних библиотек, таких как moment.js?

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Можно использовать Intl.DateTimeFormat.prototype.formatToParts(), чтобы получить формат даты, не зная его заранее.

// should default to toLocaleDateString() format
var formatter = Intl.DateTimeFormat()
// I suggest formatting the timestamp used in
// Go date formatting functions to be able to 
// extract the full scope of format rules
var dateFormat = formatter.formatToParts(new Date(1136239445999))

На моем компьютере dateFormat дает

[
    {type: "month", value: "1"},
    {type: "literal", value: "/"},
    {type: "day", value: "3"},
    {type: "literal", value: "/"},
    {type: "year", value: "2006"},
]

Итерируя по этому массиву, должно быть возможным проанализировать строку на части и затем заполнить их в Date объекте.

0 голосов
/ 20 мая 2018

Вы можете разобрать его самостоятельно.

const date = "20.05.2018, 10:21:37";
const [first, second] = date.split(',').map(item => item.trim());
const [day, month, year] = first.split('.');
const [hours, minutes, seconds] = second.split(':');

const newDate = new Date(year, month - 1, day, hours, minutes, seconds);
console.log(newDate);

Или с помощью регулярных выражений

const date = "20.05.2018, 10:21:37";
const m = /^(\d{2})\.(\d{2})\.(\d{4}), (\d{2}):(\d{2}):(\d{2})$/.exec(date);
const newDate = new Date(m[3], m[2] - 1, m[1], m[4], m[5], m[6]);
console.log(newDate);
...