2010-10-12 6 views
3


J'ai la prochaine chaîne de date:Comment créer l'objet Date à partir de la date de la chaîne en Javascript pour les premières années de A.D?

"14 Jeu novembre 0002 01:01:00 GMT + 0200 (heure normale GTB)"

et je suis en train de le convertir à l'objet Date:

date = new Date("Thu Nov 14 0002 01:01:00 GMT+0200 (GTB Standard Time)") 
=> Invalid Date {} 

et cela ne fonctionne pas. Et

date = new Date("Thu Nov 14 2 01:01:00 GMT+0200 (GTB Standard Time)") 
=> Invalid Date {} 

ne fonctionne pas trop

mais

date = new Date("Thu Nov 14 2002 01:01:00 GMT+0200 (GTB Standard Time)") 

fonctionne

Est-ce que quelqu'un sait d'une manière élégante pour l'analyser?

+0

Que signifie "GTB"? – Pointy

Répondre

6

Vous pouvez définir n'importe quelle date. y compris les minutes, les heures et les millisecondes en utilisant directement un horodatage - les dates avant 1970 sont des entiers négatifs.

alert(new Date(-62076675540000).toUTCString()); 

// >> Wed, 13 Nov 0002 23:01:00 GMT 

Or you can set the date as a string by replacing the years to make it over 1000, 
then subtracting the amount you added with setFullYear() 

var d=new Date("Thu Nov 14 1002 01:01:00 GMT+0200 (GTB Standard Time)") 
d.setFullYear(d.getFullYear()-1000) 
alert(d.toUTCString()) 

// >> Wed, 13 Nov 0002 23:01:00 GMT 

You can automate a conversion to timestamps- 

var s="Thu Nov 14 0002 01:01:00 GMT+0200 (GTB Standard Time)"; 
var y=s.split(' ')[3], y2=5000+(+y); 
var d=new Date(s.replace(y,y2)); 
d.setFullYear(d.getFullYear()-5000) 
var timestamp=+d; 
alert(timestamp) 
// >> -62076675540000 
3

Les dates Javascript sont basées sur le nombre de millisecondes depuis le 1er janvier 1970, 00: 00: 00.000 UTC. Les dates avant cela ne sont pas définies.

Vous devrez trouver votre propre moyen de représenter ces dates.

modifier — bien avoir dit que, Javascript semble prêt à représenter les dates avec weirdly grandes offfsets négatives de l'époque; décalages qui ne correspondent pas aux entiers 32 bits. Je soupçonne que la cause première de votre date est simplement que le format est en désordre l'analyseur. Il doit y avoir une virgule après l'abréviation du jour. Un autre problème (garçon c'est beaucoup plus intéressant que je ne le pensais) est que dans Chrome et Firefox au moins une année avant 100 est traitée comme une abréviation pour une année au 20e siècle.

modifier à nouveau — selon la documentation de Mozilla, une date peut être quelque chose dans la gamme de -100,000,000 jours avant l'époque à 100.000.000 jours après.