alert(new Date('2010-11-29'));
chrome, ff no tiene problemas con esto, pero safari grita "fecha inválida". Por qué ?
editar: ok, según los comentarios a continuación, utilicé el análisis de cadenas y probé esto:
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 marzo de 2018 : Parece que la gente todavía está aterrizando aquí: hoy, usaría moment
o date-fns
terminaría. Date-fns es muy libre de dolor y ligero también.
javascript
date
safari
Shrinath
fuente
fuente
Respuestas:
El patrón
yyyy-MM-dd
no es un formato oficialmente compatible para elDate
constructor. Firefox parece admitirlo, pero no cuente con que otros navegadores hagan lo mismo.Aquí hay algunas cadenas compatibles:
DateJS parece una buena biblioteca para analizar formatos de fecha no estándar.
Editar : acabo de comprobar el estándar ECMA-262 . Citando de la sección 15.9.1.15:
Fecha Hora Cadena Formato
Entonces, parece que AAAA-MM-DD está incluido en el estándar, pero por alguna razón, Safari no lo admite.
Actualización : después de mirar la documentación de datejs , usarla, su problema debe resolverse usando un código como este:
fuente
Para mí, implementar una nueva biblioteca solo porque Safari no puede hacerlo correctamente es demasiado y una expresión regular es exagerada. Aquí está el oneliner :
fuente
Estaba enfrentando un problema similar.
Date.Parse("DATESTRING")
estaba trabajando en Chrome (Versión 59.0.3071.115) pero no en Safari (Versión 10.1.1 (11603.2.5))Safari:
Cromo:
La solución que funcionó para mí fue reemplazar el espacio en dateString con
"T"
. (Ejemplo:dateString.replace(/ /g,"T")
)Safari:
Cromo:
Tenga en cuenta que la respuesta del navegador Safari es 8 horas (28800000 ms) menor que la respuesta vista en el navegador Chrome porque Safari devolvió la respuesta en TZ local (que está 8 horas detrás de UTC)
Para obtener los dos tiempos en la misma TZ
Safari:
Cromo:
fuente
new Date(year, month, date, hours, minutes, seconds, milliseconds)
constructor. Analice la fecha de la cadena a una matriz de sus componentes para usar esos componentes en el constructor. @nizantz sería genial si crees que ese ejemplo podría agregarse a tu respuesta.dateString.replace(/ /g,"T")
línea mágica de código funcionó conmigo. :)Utilizo momento para resolver el problema. Por ejemplo
fuente
Para tener una solución que funcione en la mayoría de los navegadores, debe crear su objeto de fecha con este formato
p.ej:
funciona bien con IE, FF, Chrome y Safari. Incluso versiones anteriores.
IE Dev Center: Fecha Objeto (JavaScript)
Mozilla Dev Network: Fecha
fuente
convertir cadena a Fecha desde (debe conocer la zona horaria del servidor)
donde +08: 00 = timeZone del servidor
fuente
Tuve el mismo problema. Luego usé el momento. Js. El problema ha desaparecido.
p.ej
fuente
Aunque es de esperar que los navegadores admitan ISO 8601 (o subconjuntos solo de fecha), este no es el caso. Todos los navegadores que conozco (al menos en los entornos locales de EE. UU. / Inglés que uso) pueden analizar el horrible
MM/DD/YYYY
formato de EE . UU .Si ya tiene las partes de la fecha, puede intentar usar Date.UTC () . Si no lo hace, pero debe usar el
YYYY-MM-DD
formato, sugiero usar una expresión regular para analizar las piezas que conoce y luego pasarlasDate.UTC()
.fuente
Use el formato a continuación, funcionaría en todos los navegadores
// Su salida se vería así "Mié Mar 23 2016 00:00:00 GMT + 0530 (IST)"
// Tenga en cuenta que esto estaría en la zona horaria actual en este caso denotado por IST, para convertir a la zona horaria UTC que puede incluir
// Su salida ahora quisiera este "Mar, 22 Mar 2016 18:30:00 GMT"
Tenga en cuenta que ahora dateObj muestra la hora en formato GMT, también tenga en cuenta que la fecha y la hora se han cambiado de manera correspondiente.
La función "toUTCSting" recupera el tiempo correspondiente en el meridiano de Greenwich. Esto se logra al establecer la diferencia horaria entre su zona horaria actual y la zona horaria Meridiano de Greenwich.
En el caso anterior, el tiempo antes de la conversión fue de 00:00 horas y minutos el 23 de marzo del año 2016. Y después de la conversión de GMT + 0530 (IST) horas a GMT (básicamente resta 5,30 horas de la marca de tiempo dada en este caso) el tiempo refleja 18.30 horas el 22 de marzo del año 2016 (exactamente 5.30 horas menos que la primera vez).
Además, para convertir cualquier objeto de fecha en marca de tiempo, puede usar
// la salida se vería similar a esta "1458671400000"
Esto le daría la marca de tiempo única del tiempo
fuente
¿Qué tal un secuestro
Date
con fecha fija ? Sin dependencias, min + gzip = 280 Bfuente
La mejor manera de hacerlo es utilizando el siguiente formato:
Esto es compatible con todos los navegadores y no le dará ningún problema. Tenga en cuenta que los meses se escriben del 0 al 11.
fuente
El mismo problema que enfrenta Safari y se resolvió insertando esto en la página web
Espero que funcione también tu caso
Gracias
fuente
Como @nizantz mencionó anteriormente, usar Date.parse () no funcionó para mí en Safari. Después de un poco de investigación, descubrí que la propiedad lastDateModified para el objeto File ha quedado en desuso y Safari ya no la admite. El uso de la propiedad lastModified del objeto File resolvió mis problemas. Claro que no me gusta cuando se encuentra mala información en línea.
Gracias a todos los que contribuyeron a esta publicación que me ayudaron a seguir el camino que necesitaba para conocer mi problema. Si no hubiera sido por esta información, probablemente nunca habría descubierto mi problema raíz. Tal vez esto ayude a alguien más en mi situación similar.
fuente
También estoy enfrentando el mismo problema en Safari Browser
Aquí la solución:
fuente
Esta no es la mejor solución, aunque simplemente capto el error y devuelvo la fecha actual. Personalmente, tengo ganas de no resolver los problemas de Safari, si los usuarios quieren usar un navegador que no cumpla con los estándares sh * t, tienen que vivir con caprichos.
Sugeriría que su backend envíe fechas ISO.
fuente
use el formato 'mm / dd / aaaa'. Por ejemplo: - nueva fecha ('02 / 28/2015 '). Funciona bien en todos los navegadores.
fuente