2009-06-25 6 views
0

Je travaille avec un service qui me donne des temps de diffusion pour des émissions de télévision en Unix Time (secondes depuis minuit, 1er janvier 1970, à Greenwich, Angleterre). J'ai besoin de convertir cela, en javascript, à l'heure normale de l'Est (USA). Je dois tenir compte de l'heure d'été et du fait que l'horloge du client peut être réglée sur autre chose que l'heure normale de l'Est. Je suis sûr que ce code a déjà été écrit. Quelqu'un peut-il me diriger vers cela?Javascript - Temps Unix pour un fuseau horaire spécifique

Répondre

3

Ce que vous trouverez est-il est impossible de se traduire par un fuseau horaire spécifique, mais aussi longtemps que vos utilisateurs sont dans le fuseau horaire souhaité, cela fonctionnera:

var date = new Date(); 
date.setTime(unixTime * 1000); 

L'objet date résultant affichera dans le fuseau horaire de l'ordinateur exécutant le navigateur:

window.console.log(date.toString()) 

rendements:

"Thu Jun 25 2009 09:48:53 GMT-0400 (EDT)" 

pour moi en tout cas)

+0

Merci pour la réponse, mais quelle que soit ma solution, il faudra soustraire quatre heures de l'heure unix, et il faudra ensuite gérer l'heure d'été. Ne pensez pas que ce que vous avez posté le fera. – morgancodes

+0

Tout cela repose sur les informations de fuseau horaire du navigateur. Si le système a la bonne tzdata, alors il le fera. Vous pouvez tester cela en créant des dates pour les heures d'été et d'hiver (en supposant que votre TZ locale observe DST), et en utilisant la méthode getTimezoneOffset() de Date. –

+0

Je pensais pouvoir parier sur GMT en soustrayant timeZoneOffset, puis en soustrayant manuellement quatre heures, et en corrigeant manuellement pour l'heure d'été. Un peu moche, mais il me semble que cela fonctionnerait quel que soit le fuseau horaire dans lequel le navigateur pense qu'il est. – morgancodes

0

J'ai écrit du code qui va transformer les millisecondes GMT en un objet de type Date qui peut être interrogé pour les valeurs d'heure standard de l'Est. Il gère l'heure d'été.

ESTDate = function(millis){ 

    if(isNaN(parseInt(millis))) { 
     throw new Error("ESTDate must be built using a number"); 
    } 

    var MILLIS_PER_DAY = 1000 * 60 * 60 * 24; 
    var gmtDate = new Date(millis); 

    var clockSetDate = function(month){ 

     var date = new Date(0); 
     date.setUTCFullYear(gmtDate.getUTCFullYear()); 
     date.setUTCMonth(month); 
     date.setUTCHours(2); 

     while(date.getUTCDay() != "0"){ 
      date.setTime(
       date.getTime() + MILLIS_PER_DAY 
      ); 
     }; 
     return date; 
    } 

    var startStandarTimeDate = clockSetDate(2); 
    var endStandardTimeDate = clockSetDate(10); 
    date = new Date(millis); 
    var estOffset = 60 * 60 * 1000 * 4; 
    var dltOffset = (
      (startStandarTimeDate < date) && 
      (date < endStandardTimeDate) 
     ) ? 0: 60 * 60 * 1000; 
    date.setTime(date.getTime() - (estOffset + dltOffset)); 
    var self = { 

     getDate: function(){ 
      return date.getUTCDate(); 
     }, 
     getDay:function(){ 
      return date.getUTCDay(); 
     }, 
     getFullYear:function(){ 
      return date.getUTCFullYear(); 
     }, 
     getHours:function(){ 
      return date.getUTCHours(); 
     }, 
     getMilliseconds:function(){ 
      return date.getUTCMilliseconds(); 
     }, 
     getMinutes:function(){ 
      return date.getUTCMinutes(); 
     }, 
     getMonth:function(){ 
      return date.getUTCMonth(); 
     }, 
     getSeconds:function(){ 
      return date.getUTCSeconds(); 
     } 
    } 
    return self; 
} 
+0

Renommer: startStandarTimeDate pour startStandardTimeDate. Avez-vous changé le fuseau horaire à EST? Si un utilisateur est en CST, la nouvelle date (millis) est en heure centrale, n'est-ce pas? avez-vous besoin de rendre compte de date.getTimezoneOffset()? – jon077

Questions connexes