Неверная дата в сафари - PullRequest
       36

Неверная дата в сафари

116 голосов
/ 30 ноября 2010
 alert(new Date('2010-11-29'));

chrome, ff не имеет проблем с этим, но сафари выдает «недопустимая дата». Почему?

edit: ок, согласно комментариям ниже, я использовал разбор строк и попробовал это:

alert(new Date('11-29-2010')); //doesn't work in safari
alert(new Date('29-11-2010')); //doesn't work in safari
alert(new Date('2010-29-11')); //doesn't work in safari

edit 22 марта 2018 : Кажется, что люди все еще приземляются здесь - сегодня я бы использовал moment или date-fns и покончил бы с этим. Date-fns также очень безболезненный и легкий.

Ответы [ 15 ]

1 голос
/ 09 февраля 2016

Используйте приведенный ниже формат, он будет работать на всех браузерах

var year = 2016;
var month = 02;           // month varies from 0-11 (Jan-Dec)
var day = 23;

month = month<10?"0"+month:month;        // to ensure YYYY-MM-DD format
day = day<10?"0"+day:day;

dateObj = new Date(year+"-"+month+"-"+day);

alert(dateObj); 

// Ваш вывод будет выглядеть так: «Ср 23 марта 2016 00:00:00 GMT + 0530 (IST)»

// Обратите внимание, что это будет в текущем часовом поясе, в данном случае, обозначенном IST, чтобы преобразовать в часовой пояс UTC, вы можете включить

alert(dateObj.toUTCSting);

// Ваш вывод теперь будет выглядеть так: «Вт, 22 марта 2016 г., 18:30:00 по Гринвичу»

Обратите внимание, что теперь dateObj показывает время в формате GMT, также обратите внимание, что дата и время были изменены соответственно.

Функция "toUTCSting" извлекает соответствующее время по гринвичскому меридиану. Это достигается путем установления разницы во времени между вашим текущим часовым поясом и часовым поясом Гринвичского меридиана.

В приведенном выше случае время до преобразования составило 00:00 часов и минут 23 марта 2016 года. А после преобразования из GMT + 0530 (IST) в GMT (в основном вычитается 5.30 часов из заданного метка времени в данном случае) время отражает 18.30 часов 22 марта 2016 года (ровно 5.30 часов после первого раза).

Далее, чтобы преобразовать любой объект даты в метку времени, вы можете использовать

alert(dateObj.getTime());

// вывод будет выглядеть примерно так: "1458671400000"

Это даст вам уникальную временную метку времени

0 голосов
/ 23 мая 2019

Я также столкнулся с той же проблемой в браузере Safari

var date = new Date("2011-02-07");
console.log(date) // IE you get ‘NaN’ returned and in Safari you get ‘Invalid Date’

Вот решение:

var d = new Date(2011, 01, 07); // yyyy, mm-1, dd  
var d = new Date(2011, 01, 07, 11, 05, 00); // yyyy, mm-1, dd, hh, mm, ss  
var d = new Date("02/07/2011"); // "mm/dd/yyyy"  
var d = new Date("02/07/2011 11:05:00"); // "mm/dd/yyyy hh:mm:ss"  
var d = new Date(1297076700000); // milliseconds  
var d = new Date("Mon Feb 07 2011 11:05:00 GMT"); // ""Day Mon dd yyyy hh:mm:ss GMT/UTC 
0 голосов
/ 28 февраля 2019

Как уже упоминалось @nizantz, использование Date.parse () не работает для меня в Safari.После небольшого исследования я узнал, что свойство lastDateModified для объекта File устарело и больше не поддерживается Safari.Использование свойства lastModified объекта File решило мои проблемы.Конечно, мне не нравится, когда в Интернете обнаруживается плохая информация.

Спасибо всем, кто внес вклад в этот пост, который помог мне пойти по пути, который мне нужен, чтобы узнать о моей проблеме.Если бы не эта информация, я бы, наверное, не разобрался в своей основной проблеме.Может быть, это поможет кому-то еще в моей подобной ситуации.

0 голосов
/ 08 февраля 2018

Та же проблема возникла в Safari, и ее удалось решить, вставив ее в веб-страницу

 <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en"></script> 

Надеюсь, это сработает и в вашем случае

Спасибо

0 голосов
/ 25 февраля 2015

используйте формат «мм / дд / гггг».Например: - новая дата ('02 / 28/2015 ').Хорошо работает во всех браузерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...