alert(new Date('2010-11-29'));
chrome, ff não tem problemas com isso, mas o safari grita "data inválida". Por quê ?
edit: ok, conforme os comentários abaixo, usei a análise de string e tentei o seguinte:
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
editar 22 de março de 2018 : Parece que as pessoas ainda estão chegando aqui - Hoje, eu usaria moment
ou acabaria date-fns
com isso. Date-fns é muito livre de dor e leve também.
javascript
date
safari
Shrinath
fonte
fonte
Respostas:
O padrão
yyyy-MM-dd
não é um formato oficialmente suportado para oDate
construtor. O Firefox parece suportá-lo, mas não conte com outros navegadores fazendo o mesmo.Aqui estão algumas seqüências suportadas:
O DateJS parece ser uma boa biblioteca para analisar formatos de data não padrão.
Edit : acabou de verificar o padrão ECMA-262 . Citando a seção 15.9.1.15:
Data Hora Formato da sequência
Portanto, parece que AAAA-MM-DD está incluído no padrão, mas, por alguma razão, o Safari não é compatível.
Atualização : após examinar a documentação do datejs , utilizá-lo, seu problema deve ser resolvido usando um código como este:
fonte
Para mim, implementar uma nova biblioteca apenas porque o Safari não pode fazê-lo corretamente é demais e um regex é um exagero. Aqui está o oneliner :
fonte
Eu estava enfrentando um problema semelhante.
Date.Parse("DATESTRING")
estava trabalhando no Chrome (versão 59.0.3071.115), mas não no Safari (versão 10.1.1 (11603.2.5))Safári:
Cromada:
A solução que funcionou para mim foi substituir o espaço no dateString por
"T"
. (exemplodateString.replace(/ /g,"T")
:)Safári:
Cromada:
Observe que a resposta do navegador Safari é 8 horas (28800000ms) menor que a resposta vista no navegador Chrome porque o Safari retornou a resposta na TZ local (que fica 8 horas atrás do UTC)
Para obter os dois tempos no mesmo TZ
Safári:
Cromada:
fonte
new Date(year, month, date, hours, minutes, seconds, milliseconds)
construtor. Analise a data da string com uma matriz de seus componentes para usar esses componentes no construtor. @ Nizantz, seria ótimo se você acha que esse exemplo pode ser adicionado à sua resposta.dateString.replace(/ /g,"T")
linha mágica de código funcionou de mim. :)Eu uso o momento para resolver o problema. Por exemplo
fonte
Para ter uma solução funcionando na maioria dos navegadores, você deve criar seu objeto de data com este formato
por exemplo:
funciona bem com IE, FF, Chrome e Safari. Versões ainda mais antigas.
IE Dev Center: objeto de data (JavaScript)
Rede de Desenvolvimento Mozilla: Data
fonte
converter string em data fromat (você precisa conhecer o fuso horário do servidor)
onde +08: 00 = fuso horário do servidor
fonte
Eu tive o mesmo problema.Em seguida, usei o momento.Js . O problema desapareceu.
por exemplo
fonte
Embora você possa esperar que os navegadores suportem a ISO 8601 (ou subconjuntos somente de data), esse não é o caso. Todos os navegadores que eu conheço (pelo menos nos locais dos EUA / inglês que eu uso) são capazes de analisar o horrível
MM/DD/YYYY
formato dos EUA .Se você já possui as partes da data, tente usar Date.UTC () . Se não, mas você deve usar o
YYYY-MM-DD
formato, sugiro usar uma expressão regular para analisar as peças que você conhece e depois passá-las paraDate.UTC()
.fonte
Use o formato abaixo, ele funcionaria em todos os navegadores
// Sua saída ficaria assim "Qua 23 de março de 2016 00:00:00 GMT + 0530 (IST)"
// Observe que este estaria no fuso horário atual, neste caso indicado pelo IST, para converter para o fuso horário UTC, você pode incluir
// Sua saída agora gostaria desta "ter, 22 de março de 2016 18:30:00 GMT"
Observe que agora o dateObj mostra a hora no formato GMT, observe também que a data e a hora foram alteradas correspondentemente.
A função "toUTCSting" recupera o horário correspondente no meridiano de Greenwich. Isso é feito estabelecendo a diferença horária entre o fuso horário atual e o fuso horário do Meridiano de Greenwich.
No caso acima, o tempo antes da conversão era 00:00 horas e minutos em 23 de março do ano de 2016. E após a conversão das horas GMT + 0530 (IST) para GMT (subtrai basicamente 5,30 horas do carimbo de data / hora especificado neste caso) o tempo reflete 18,30 horas em 22 de março do ano de 2016 (exatamente 5,30 horas antes da primeira vez).
Além disso, para converter qualquer objeto de data em carimbo de data / hora, você pode usar
// saída seria algo semelhante a este "1458671400000"
Isso daria a você o carimbo de data e hora exclusivo
fonte
Que tal seqüestrar
Date
com data fixa ? Sem dependências, min + gzip = 280 Bfonte
A melhor maneira de fazer isso é usando o seguinte formato:
Isso é suportado em todos os navegadores e não oferece nenhum problema. Observe que os meses são gravados de 0 a 11.
fonte
O mesmo problema enfrentado no Safari e foi resolvido inserindo-o na página da web
Espero que também funcione no seu caso
obrigado
fonte
Como o @nizantz mencionou anteriormente, o uso do Date.parse () não estava funcionando para mim no Safari. Após algumas pesquisas, soube que a propriedade lastDateModified para o objeto File foi preterida e não é mais suportada pelo Safari. O uso da propriedade lastModified do objeto File resolveu meus problemas. Certamente não gosto quando informações ruins são encontradas online.
Obrigado a todos que contribuíram para este post que me ajudaram a seguir o caminho que eu precisava para aprender sobre o meu problema. Se não fosse por essa informação, eu provavelmente nunca teria descoberto meu problema raiz. Talvez isso ajude alguém na minha situação semelhante.
fonte
Também estou enfrentando o mesmo problema no Safari Browser
Aqui a solução:
fonte
Esta não é a melhor solução, embora eu simplesmente pegue o erro e envie a data atual. Pessoalmente, sinto que não estou resolvendo problemas do Safari, se os usuários quiserem usar um navegador que não seja compatível com os padrões * - eles precisam conviver com peculiaridades.
Sugiro que seu back-end envie datas ISO.
fonte
use o formato 'mm / dd / aaaa'. Por exemplo: - nova data ('02 / 28/2015 '). Funciona bem em todos os navegadores.
fonte