Преобразование IST в местное время в angular js

С сервера я получаю время в формате «21.11.2017 17:01:30», и это время в IST. Я хочу преобразовать это время в местное время пользователей.

Я использую приведенный ниже код для этого,

var startDateTimeArray = eachExeRun.startDate.split(" ");
var startDateArray = startDateTimeArray[0].split("/");
var startDate = new Date(startDateArray[2]+"-"+startDateArray[1]+"-"+startDateArray[0]+' '+startDateTimeArray[1]);

И теперь моя startDate — «Вторник, 21 ноября 2017 г., 16:59:29 GMT+0530 (Стандартное время Индии)».

В html я использовал вот так

{{startDate | date:'yyyy-MM-dd HH:mm:ss'}}

После этого, чтобы проверить свой код, я изменил часовой пояс своей системы на тихоокеанский часовой пояс, затем мое startTime изменилось на «Вторник, 21 ноября 2017 г., 16:59:29 GMT-0800 (стандартное тихоокеанское время)», но в мое представление по-прежнему показывает "2017-11-21 16:59:29".

Как я могу отображать обновленное время без использования часового пояса в фильтре даты (дата: 'гггг-ММ-дд ЧЧ: мм: сс Z').


person Anna    schedule 28.11.2017    source источник
comment
Я предлагаю вам использовать moment.js, который отлично подходит для преобразования даты и времени, очень популярная библиотека.   -  person danday74    schedule 28.11.2017
comment
Может помочь MomentJS с moment-timezone.   -  person 31piy    schedule 28.11.2017


Ответы (2)


Использование moment.js — лучший способ.

Однако вы также можете написать собственный фильтр для преобразования дат.

Попробуй это:

    app.filter('myFormat', function() {
        return function(x) {
                var startDateTimeArray = x.split(" ");
                var startDateArray = startDateTimeArray[0].split("/");
                var startDate = new Date(startDateArray[2]+"-"+startDateArray[1]+"-"+startDateArray[0]+' '+startDateTimeArray[1]);
                console.log(startDate);
                //from timezone
                var IST_timezone_offset = -330; // IST timezone offset -always known
                var req_UTC_Milliseconds =  (IST_timezone_offset * 60000) ;
                //to timezone
                var local_timezone_offset = startDate.getTimezoneOffset(); 
                var local_UTC_Milliseconds = (local_timezone_offset * 60000);

                var final_date = new Date( startDate.getTime() + (req_UTC_Milliseconds - local_UTC_Milliseconds ) );

                return final_date;
            };
        });

Рабочая скрипка

person dev8080    schedule 28.11.2017

Используя momentJs, это довольно просто:

Найдите фрагмент рабочего кода ниже:

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<script src="https://momentjs.com/downloads/moment.js"></script>
<script src="https://momentjs.com/downloads/moment-with-locales.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>

<body>

    <h2>My IST to Local System Date Convertor</h2>
    <div ng-app="myApp" ng-controller="dateCtrl">
        <p>{{convertIstToSystemLocalDateUsingTimeZone(IstStartDate)}}</p>
    </div>

    <script>
        var app = angular.module('myApp', []);
        app.controller('dateCtrl', function ($scope) {
            $scope.IstStartDate = '21/11/2017 17:01:30';
            $scope.convertIstToSystemLocalDateUsingTimeZone = function (incomingISTString) {
                return moment.tz(incomingISTString, 'DD-MM-YYYY HH:mm:ss', 'Asia/Kolkata')
                    .local().format('DD-MM-YYYY HH:mm:ss');
            }
        });
    </script>

</body>

</html>

person Prateek Talesara    schedule 12.10.2019