2014-02-17 11 views
17

Ich bin auf der Suche nach Daten im Bezug auf die Zeitzonen der Benutzer.AngularJS global Datum Zeitzone Offset

Meine Hoffnung ist, dass Angular die Möglichkeit hat, den Date Filter global zu konfigurieren, um dies zu tun - dies manuell von Fall zu Fall zu tun, fühlt sich falsch an.

Meine Zeitstempel sind bereits in einer timestamp() Funktion (einfach zu multiplizieren, um 1000) eingewickelt, aber ich würde nicht diese Funktion zu ändern, es vorziehen, wenn ich haben nicht zu.

Edit:

ich das tue, und es funktioniert, aber wie oben erwähnt, würde Ich mag diese eine Ebene höher setzen, wenn möglich

$scope.timestamp = function (unix_time) { 
    var epoch = (unix_time * 1000); 
    var date = new Date(); 
    var localOffset = (-1) * date.getTimezoneOffset() * 60000; 
    var stamp = Math.round(new Date(epoch + localOffset).getTime()); 
    return stamp; 
}; 

Antwort

18

Also, dank der Änderungen in eckigen 1.4.x ist das jetzt trivial. Der richtige Weg, dies zu umgehen, wäre, einen Dekorator zu erstellen, der den eingebauten Datumsfilter vor der Ausführung ändert. Dies ist trivial einfach und wird sich nicht auf die Leistung auswirken.

Dies ist eine, die ich benutze. Es fügt einfach eine DEFAULT_TIMEZONE hinzu, wenn keine Zeitzone angegeben ist. Dies hat zur Folge, dass alle Termine in der App auf GMT verschoben werden, solange keine andere Zeitzone angegeben ist.

module.config(['$provide', function($provide) { 
    var DEFAULT_TIMEZONE = 'GMT'; 

    $provide.decorator('dateFilter', ['$delegate', '$injector', function($delegate, $injector) { 
     var oldDelegate = $delegate; 

     var standardDateFilterInterceptor = function(date, format, timezone) { 
     if(angular.isUndefined(timezone)) { 
      timezone = DEFAULT_TIMEZONE; 
     } 
     return oldDelegate.apply(this, [date, format, timezone]); 
     }; 

     return standardDateFilterInterceptor; 
    }]); 
}]); 
10

Von offizieller Dokumentation:

Zeitzonen

Beachten Sie, dass Angular Datetime-Filter, um die Zeitzone verwenden Einstellungen des Browsers. So zeigt die gleiche Anwendung unterschiedliche Zeit Informationen in Abhängigkeit von der Zeitzone Einstellungen des Computers die Anwendung läuft auf. Weder Javascript noch Angular unterstützt derzeit die Anzeige des Datums mit einer Zeitzone, die von dem Entwickler angegeben wird. mit Ihrer Funktion als Konstruktor

http://docs.angularjs.org/guide/i18n

Eine Ebene 'höher' (... AKA-Klasse) einen Wrapper Typ Schaffung werden könnte. Dies sollte am Einstiegspunkt der Anwendung codiert werden, um es überall verwenden zu können.

+0

'ein Wrapper-Typ (AKA-Klasse, ...) mit Ihrer Funktion als Konstrukteur.Können Sie hier näher ausführen? Hast du ein Beispiel? – couzzi

+1

Dies ist nicht mehr gültig. Angulars date $ filter unterstützt jetzt einen dritten Parameter 'timezone'. Nehmen Sie stattdessen "UTC", "GMT" oder einen Zeitzonen-Offset wie folgt an: "+0430". Die nächste Frage, die man stellen muss, um die Frage von couzzi zu beantworten, ist, dass dies in einer Konfiguration eingestellt werden kann, um immer etwas wie "GMT" anzuwenden, wenn keine Zeitzone vorhanden ist. – thegreenpizza