Vraag AngularJS global Datum tijdzone offset


Ik wil datums weergeven die betrekking hebben op de tijdzones van de gebruikers.

Ik hoop dat Angular de hele wereld kan configureren Date filter om dit te doen - dit moet van geval tot geval handmatig verkeerd worden gedaan.

Mijn tijdstempels zijn al ingepakt in a timestamp() functie (eenvoudig vermenigvuldigen met 1000), maar ik zou die functie liever niet wijzigen als ik dat niet doe hebben naar.

Bewerk:

Ik doe dit en het werkt, maar zoals hierboven vermeld, zou ik dit zo mogelijk nog een niveau hoger willen instellen

$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;
};

17
2018-02-17 23:30


oorsprong


antwoorden:


Dus dankzij veranderingen in hoek 1.4.x is dit nu triviaal. De juiste manier om hiermee om te gaan, is om een ​​decorateur te maken die het ingebouwde datafilter verandert voordat het wordt uitgevoerd. Dit is eenvoudig en heeft geen invloed op de prestaties.

Dit gebruik ik. Het voegt eenvoudig een DEFAULT_TIMEZONE toe als er geen tijdzone is opgegeven. Dit heeft tot gevolg dat alle datums in de app naar GMT worden verplaatst zolang geen andere tijdzone wordt vermeld.

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;
     }]);
}]);

20
2018-02-02 18:25



Van officiële documentatie:

Tijdzones

Houd er rekening mee dat Angulair datetime filter de tijdzone-instellingen gebruikt   van de browser. Dus dezelfde applicatie zal een andere tijd laten zien   informatie afhankelijk van de tijdzone-instellingen van de computer dat   de applicatie draait. Noch Javascript noch Angular   ondersteunt momenteel de weergave van de datum met een tijdzone gespecificeerd door   de ontwikkelaar.

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

Een niveau 'hoger' zou een wikkel kunnen zijn type (AKA-klasse, ...) met uw functie als constructor. Dit moet bij het beginpunt van de applicatie worden gecodeerd zodat het overal kan worden gebruikt.


10
2018-02-18 01:19



Heb je uitgecheckt momentjs  http://momentjs.com/ ?

Er zijn ook hoekige tijdzones, maar ik kan niet tegen dat pakket praten (https://github.com/michaelahlers/angular-timezones).


1
2018-02-18 00:04