alert(new Date('2010-11-29'));
chrome, ff n'a pas de problèmes avec cela, mais safari crie "date invalide". Pourquoi ?
edit: ok, selon les commentaires ci-dessous, j'ai utilisé l'analyse de chaîne et j'ai essayé ceci:
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 mars 2018 : On dirait que les gens débarquent encore ici - Aujourd'hui, j'utiliserais moment
ou j'en aurais date-fns
fini avec. Date-fns est également très indolore et léger.
javascript
date
safari
Shrinath
la source
la source
Réponses:
Le modèle
yyyy-MM-dd
n'est pas un format officiellement pris en charge pour leDate
constructeur. Firefox semble le soutenir, mais ne comptez pas sur d'autres navigateurs pour faire de même.Voici quelques chaînes prises en charge:
DateJS semble être une bonne bibliothèque pour analyser les formats de date non standard.
Edit : vient de vérifier la norme ECMA-262 . Citant l'article 15.9.1.15:
Format de chaîne de date et d'heure
Donc, il semble que AAAA-MM-JJ soit inclus dans la norme, mais pour une raison quelconque, Safari ne le prend pas en charge.
Mise à jour : après avoir consulté la documentation de datejs , en l'utilisant, votre problème devrait être résolu en utilisant un code comme celui-ci:
la source
Pour moi, implémenter une nouvelle bibliothèque simplement parce que Safari ne peut pas le faire correctement, c'est trop et une regex est exagérée. Voici le oneliner :
la source
J'étais confronté à un problème similaire.
Date.Parse("DATESTRING")
fonctionnait sur Chrome (Version 59.0.3071.115) mais pas sur Safari (Version 10.1.1 (11603.2.5))Safari:
Chrome:
La solution qui a fonctionné pour moi était de remplacer l'espace dans la chaîne dateString par
"T"
. (Exemple:dateString.replace(/ /g,"T")
)Safari:
Chrome:
Notez que la réponse du navigateur Safari est inférieure de 8 heures (28800000ms) à la réponse affichée dans le navigateur Chrome car Safari a renvoyé la réponse dans la TZ locale (qui est à 8 heures derrière UTC)
Pour obtenir les deux heures dans la même TZ
Safari:
Chrome:
la source
new Date(year, month, date, hours, minutes, seconds, milliseconds)
constructeur. Analyser la date de chaîne dans un tableau de ses composants afin d'utiliser ces composants dans le constructeur. @nizantz ce serait formidable si vous pensez qu'un tel exemple pourrait être ajouté à votre réponse.dateString.replace(/ /g,"T")
ligne de code magique a fonctionné pour moi. :)J'utilise le moment pour résoudre le problème. Par exemple
la source
Pour qu'une solution fonctionne sur la plupart des navigateurs, vous devez créer votre objet date avec ce format
par exemple:
fonctionne très bien avec IE, FF, Chrome et Safari. Même les anciennes versions.
Centre de développement IE: objet de date (JavaScript)
Mozilla Dev Network: Date
la source
convertir la chaîne en date à partir de (vous devez connaître le fuseau horaire du serveur)
où +08: 00 = timeZone du serveur
la source
J'ai eu le même problème.Ensuite, j'ai utilisé moment.Js .Problem a disparu.
par exemple
la source
Bien que vous puissiez espérer que les navigateurs prendront en charge ISO 8601 (ou des sous-ensembles de date uniquement), ce n'est pas le cas. Tous les navigateurs que je connais (au moins dans les régions américaines / anglaises que j'utilise) sont capables d'analyser l'horrible
MM/DD/YYYY
format américain .Si vous avez déjà les parties de la date, vous pouvez à la place essayer d'utiliser Date.UTC () . Si vous ne le faites pas, mais que vous devez utiliser le
YYYY-MM-DD
format, je suggère d'utiliser une expression régulière pour analyser les éléments que vous connaissez, puis les transmettreDate.UTC()
.la source
Utilisez le format ci-dessous, cela fonctionnerait sur tous les navigateurs
// Votre sortie ressemblerait à ceci "Wed Mar 23 2016 00:00:00 GMT + 0530 (IST)"
// Notez que ce serait dans le fuseau horaire actuel dans ce cas indiqué par IST, pour convertir en fuseau horaire UTC, vous pouvez inclure
// Votre sortie maintenant aimerait ceci "Tue, 22 Mar 2016 18:30:00 GMT"
Notez que maintenant la dateObj affiche l'heure au format GMT, notez également que la date et l'heure ont été modifiées en conséquence.
La fonction "toUTCSting" récupère l'heure correspondante au méridien de Greenwich. Il accomplit cela en établissant le décalage horaire entre votre fuseau horaire actuel et le fuseau horaire du méridien de Greenwich.
Dans le cas ci-dessus, le temps avant la conversion était de 00:00 heures et minutes le 23 mars de l'année 2016. Et après la conversion de GMT + 0530 (IST) heures en GMT (il soustrait essentiellement 5.30 heures de l'horodatage donné dans ce cas), l'heure correspond à 18h30 le 22 mars de l'année 2016 (exactement 5h30 de retard sur la première fois).
En outre, pour convertir n'importe quel objet de date en horodatage, vous pouvez utiliser
// la sortie ressemblerait à ce "1458671400000"
Cela vous donnerait l'horodatage unique de l'heure
la source
Que diriez-vous de détourner
Date
avec fix-date ? Aucune dépendance, min + gzip = 280 Bla source
La meilleure façon de le faire est d'utiliser le format suivant:
Ceci est pris en charge dans tous les navigateurs et ne vous posera aucun problème. Veuillez noter que les mois sont écrits de 0 à 11.
la source
Le même problème rencontré dans Safari et il a été résolu en l'insérant dans la page Web
J'espère que cela fonctionnera aussi votre cas
Merci
la source
Comme @nizantz l'a mentionné précédemment, utiliser Date.parse () ne fonctionnait pas pour moi dans Safari. Après quelques recherches, j'ai appris que la propriété lastDateModified de l'objet File était obsolète et qu'elle n'était plus prise en charge par Safari. L'utilisation de la propriété lastModified de l'objet File a résolu mes problèmes. Bien sûr, je n'aime pas quand de mauvaises informations sont trouvées en ligne.
Merci à tous ceux qui ont contribué à cet article qui m'a aidé à suivre le chemin dont j'avais besoin pour en savoir plus sur mon problème. Sans cette information, je n'aurais probablement jamais compris mon problème racine. Peut-être que cela aidera quelqu'un d'autre dans ma situation similaire.
la source
Je suis également confronté au même problème dans le navigateur Safari
Voici la solution:
la source
Ce n'est pas la meilleure solution, même si j'attrape simplement l'erreur et renvoie la date actuelle. J'ai personnellement l'impression de ne pas résoudre les problèmes de Safari, si les utilisateurs veulent utiliser un navigateur sh * t non conforme aux normes - ils doivent vivre avec des bizarreries.
Je suggère que votre backend envoie les dates ISO.
la source
utilisez le format «mm / jj / aaaa». Par exemple: - nouvelle date ('02/28/2015'). Cela fonctionne bien dans tous les navigateurs.
la source