Получение некоторых несогласованных результатов в javascript при преобразовании дат в строки и строки в даты. Этот код, как отмечается в комментариях, кажется странным:Дата преобразования головоломка
// Start with a string literal
var s1 = "10/31/2014";
// Convert string to date
var f1 = s1.split("/");
var d1 = new Date(f1[2], (f1[0] - 1), f1[1]);
alert("Date from string: " + d1); // works
// Convert that date to a string
a1 = (d1.toLocaleString("en-US")).split(" ", 1);
alert("Array[0] from split: " + a1[0]); // works
s2 = a1[0];
alert("String from Array[0] assignment: " + s2);
// Convert string to date (identical to before)
var f2 = s2.split("/");
var d2 = new Date(f2[2], (f2[0] - 1), f2[1]);
alert("Date from String: " + d2); // fails: "Invalid date"
Кто-нибудь знает, почему эта строка не является строкой?
Btw, изменение
s2 = a1[0];
в
s2 = a1[0].toString();
довольно предсказуемо, ничего не меняет. Идеи?
http://jsfiddle.net/pfvh6fed/1/
Я запускаю это в Chrome, и вы на 100% правильны. Chrome возвращает запятую после 2014 года, а IE - нет. Как ни странно, это не ошибка. Попробуйте в IE, и у него нет запятой, и это STILL не работает. Возможно, мне не хватает чего-то очевидного, но я думаю, что он должен работать без запятой, как в IE. – Samene
Хорошо, после большой отладки я решил, что в IE есть одна ошибка. Когда вы создаете строку данных, по какой-либо причине, каждую сторону каждого числа в дате, как указано здесь. '* 14 */* 08 */* 2014 *' есть фантомный символ символьного кода '8206'. Этот символ закручивает функцию parseInt() IE, которая является частью преобразования строки в дату. Вы даете ему строку, она пытается сделать int, но не получается из-за этих двух символов. Это может быть исправлено с заменой регулярного выражения, но гораздо лучше пойти с ответом @ Jofre. – MarshallOfSound
Это можно проверить, предупредив длину строки даты 'a1 [0]', вы увидите, что она на 6 символов длиннее видимой. Это из-за этих 6 «фантонных» символов, которые IE ставит там по какой-то глупой причине. – MarshallOfSound