56 votes

Différence entre Date(dateString) et new Date(dateString)

J'ai un code qui essaie d'analyser une chaîne de date.

Quand je le fais alert(Date("2010-08-17 12:09:36")); Il analyse correctement la date et tout fonctionne bien, mais je ne peux pas appeler les méthodes associées à la fonction Date comme getMonth() .

Quand j'essaie :

var temp = new Date("2010-08-17 12:09:36");
alert(temp);

J'obtiens une erreur "date non valide".

Comment analyser "2010-08-17 12:09:36" avec new Date() ?

0 votes

Est-ce que alert(Date("2010-08-17 12:09:36").getMonth()) ; fonctionne ? Je viens de coller var temp = new Date("2010-08-17 12:09:36") ; alert(temp) ; dans une page HTML et cela a bien fonctionné.

0 votes

Utilisez new Date("2010-08-17T12:09:36") ou new Date("2010-08-17T12:09:36Z") pour l'heure UTC.

66voto

Topera Points 4941

Date()

Pour ce faire, vous appelez une fonction appelée Date() . Elle n'accepte aucun argument et renvoie une chaîne de caractères représentant la date et l'heure actuelles.

nouvelle Date()

Vous créez ainsi une nouvelle instance de Date.

Vous ne pouvez utiliser que les constructeurs suivants :

new Date() // current date and time
new Date(milliseconds) //milliseconds since 1970/01/01
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)

Utilisez donc 2010-08-17 12:09:36 en tant que paramètre d'un constructeur n'est pas autorisé.

Voir w3schools .


EDITAR: new Date(dateString) utilise l'un de ces formats :

  • "13 octobre 1975 11:13:00"
  • "13 octobre 1975 11:13"
  • "13 octobre 1975

0 votes

N'y a-t-il pas d'autre moyen de traiter la chaîne sans créer mon propre analyseur de date ?

0 votes

Je ne sais pas comment faire cela en utilisant les js natifs. Mais vous pouvez utiliser un parseur externe, comme datejs ( datejs.com )

2 votes

De même, dans chrome et firefox, new Date() fonctionne différemment. Par exemple, "yyyy-mm-dd hh:mm:ss" convient à chrome mais pas à firefox.

39voto

Daghall Points 91

Le format suivant fonctionne en tous les navigateurs :

new Date("2010/08/17 12:09:36");

Ainsi, pour faire un yyyy-mm-dd hh:mm:ss Pour que la chaîne de date formatée soit entièrement compatible avec le navigateur, il faut remplacer les tirets par des barres obliques :

var dateString = "2010-08-17 12:09:36";
new Date(dateString.replace(/-/g, "/"));

1 votes

+1 : a fonctionné pour moi dans IE5-11 et semble être la solution la plus simple pour convertir une chaîne de date de style ISO-8601.

0 votes

Non, ne faites pas ça. Il vaut mieux implémenter une fonction en 2 lignes pour analyser manuellement la chaîne (ou utiliser une bibliothèque, mais ce n'est pas vraiment nécessaire). La spécification du langage n'exige pas des navigateurs qu'ils analysent les chaînes de caractères de type cualquier autre que le format ISO 8601, et certains ne le supportent pas non plus.

6voto

Vals Points 168

La différence est que (si je me souviens bien de la documentation de l'ECMA), le fait est que Date("xx") ne crée pas (dans un sens) un nouvel objet date (en fait, cela équivaut à appeler ( new Date("xx").toString() ). Tandis que les new Date("xx") créera en fait un nouvel objet date.

Pour plus d'informations :

Voir le point 15.9.2 du http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf

4voto

The Composer Points 114

Je sais que c'est vieux, mais la solution de loin la plus simple est d'utiliser simplement

var temp = new Date("2010-08-17T12:09:36");

0 votes

Cette opération échoue dans Safari.

3 votes

Ce n'est pas parce qu'il échoue dans Safari qu'il ne s'agit pas d'une utilisation correcte de JavaScript. Je n'ai pas non plus Safari pour tester cela, mais je ne sais pas pourquoi quelque chose d'aussi omniprésent fonctionnerait dans certains navigateurs et pas dans d'autres. Quoi qu'il en soit, cela ne mérite pas un vote négatif.

1 votes

@TheComposer-bienvenue dans le monde des scripts de navigateur. Jusqu'à ES5, il y avait non chaîne de caractères que les navigateurs devaient analyser en vertu de la norme. Certains de ces navigateurs sont encore utilisés. Il est certain qu'à tout moment, il existe des navigateurs qui ne prennent pas entièrement en charge la norme la plus récente (ou même une norme datant de quelques années). Vous devez donc programmer en fonction du plus petit dénominateur commun de ce que les navigateurs prennent en charge, et non pas strictement en fonction de ce que la spécification actuelle stipule.

3voto

letronje Points 3228

Utilisation correcte de la date : https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

De même, le morceau de code suivant montre comment, avec une seule définition de la fonction "Animal", celle-ci peut être a) appelée directement et b) instanciée en la traitant comme une fonction de construction.

function Animal(){
    this.abc = 1;
    return 1234; 
}

var x = new Animal();
var y = Animal();

console.log(x); //prints object containing property abc set to value 1
console.log(y); // prints 1234

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X