角度时刻日期时间选择器时区指令问题

时间:2017-10-17 05:24:55

标签: angularjs angular-moment

以下代码在表单中显示日期时间选择器,我使用angular-moment-picker插件作为选择器。当我选择某个日期/时间时,它会在选择器输入框中显示正确的时间,但在提交表单后,在db中输入的时间就会滞后。所以我使用了stackoverflow答案中的timezone指令。但它抛出viewValue.getMinutes不是函数错误

<div moment-picker="startTime" class="form-control"  name="startTime" 
  ng-model="shiftTimings.startTime" format="YYYY-MM-DD HH:mm:ss" datepicker-localdate > 
     {{ startTime }} </div>

指令

app.directive('datepickerLocaldate', ['$parse', function ($parse) {
        var directive = {
            restrict: 'A',
            require: ['ngModel'],
            link: link
        };
        return directive;

        function link(scope, element, attr, ctrls) {
            var ngModelController = ctrls[0];

            ngModelController.$parsers.push(function (viewValue) {

                viewValue.setMinutes(viewValue.getMinutes() - viewValue.getTimezoneOffset());

                return viewValue.toISOString().substring(0, 10);
            });


            ngModelController.$formatters.push(function (modelValue) {
                if (!modelValue) {
                    return undefined;
                }

                var dt = new Date(modelValue);

                dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset());
                return dt;
            });
        }
}]);

1 个答案:

答案 0 :(得分:2)

它也发生在我身上!当javascript日期传递给浏览器时,浏览器使用GMT的时间就是你的时间滞后于db的原因。

我已经使用了一个解决方法。我没有传递javascript日期对象,而是在将它传递给后台之前用格式化我的日期。

所以shiftTimings.startTime在发送之前可以像这样操纵:

var tempDate=moment(shiftTimings.startTime).format("YYYY-MM-DDTHH:mm:ss.SSS") + 'Z';

然后你可以将tempDate传递给你的后端。