ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript-AngularJS:RangeError:Date.toISOString()处的时间值无效

2019-10-26 00:47:02  阅读:195  来源: 互联网

标签:angularjs datepicker javascript jquery date


在我的项目中,我必须在jquery(angular-jquery-datepicker)日期选择器中显示日期,该日期以正确的方式为用户所在的区域设置格式.
我能够以美国和欧盟格式显示.当用户设置这些日期时,我必须将其与toISOString一起保存到数据库中.但是,对于美国来说,一点问题都没有问题.对于EU格式,我收到标题中张贴的错误,并且我要分享整个错误:

RangeError: Invalid time value
at Date.toISOString (<anonymous>)
at n.$scope.save (scripts.js:2826)
at angular.js:12474
at f (angular.js:21700)
at n.$eval (angular.js:14570)
at n.$apply (angular.js:14669)
at HTMLButtonElement.<anonymous> (angular.js:21705)
at HTMLButtonElement.dispatch (jquery.min.js:3)
at HTMLButtonElement.r.handle (jquery.min.js:3)

我不知道为什么在美国使用日期有效而在欧盟无效.我不明白为什么某个日期有效,而另一日期却无效.

下面,我分享了给出该错误的代码:

 $scope.save = function() {
  if ($scope.banner.fromText != null && $scope.banner.toText != null) {
            $scope.banner.from = new Date($scope.banner.fromText);
            $scope.banner.to = new Date($scope.banner.toText);
            $scope.banner.to.setHours(23, 59, 59)
            $scope.banner.from = $scope.banner.from.toISOString()
            $scope.banner.to = $scope.banner.to.toISOString()
 }else{
  $scope.banner.to = null
  $scope.banner.from = null
 }

我在代码$filter(‘date’)(value.item.from,’shortDate’);中使用

但是,如果您需要了解一些其他信息来理解此错误,请告诉我应该发布的内容,以便更好地了解它

我的日期选择器指令:

'use strict';
angular.module('angular-jquery-datepicker', []).factory('datepicker', 
[function() {
return $.datepicker;
}]).provider('$datepicker', function() {
return {
    setDefaults: function(language) {
        $.datepicker.setDefaults($.datepicker.regional[language]);
    },
    $get: function() {
        return {

        }
    }
}
}).directive('jqdatepicker', function() {
return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, element, attr, ctrl) {
        element.datepicker({
            //dateFormat: 'dd-mm-yy',
            autoclose: true,
            changeMonth: true,
            changeYear: true,
            maxDate: Date.today(),
            showOn: "both",
            buttonImage: "/img/calendar-o.png",
            onSelect: function(date) {
                ctrl.$setViewValue(date);
                ctrl.$render();
                scope.$apply();
            }
        });
    }
};

/*Datepicker for banner - extended main datepicker*/
}).directive('jqdatepickerbanner', function() {
return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, element, attr, ctrl) {

        //scope.customStartDate = today;
        element.datepicker({
            //dateFormat: 'dd-mm-yy',
            changeMonth: true,
            changeYear: true,
            //maxDate: '+6mm', // 6 Months max date --> For set the maximum period the Banner can be set up
            minDate: Date.today(),
            showOn: "both",
            buttonImage: "/img/calendar-o.png",
            onSelect: function(date) {
                if (this.id === "startDateBanner") {
                    $("#endDateBanner").datepicker("option", "minDate", date);
                }
                ctrl.$setViewValue(date);
                ctrl.$render();
                scope.$apply();
            }
        });
    }
};
});

解决方法:

事实证明,在无效日期调用ISOString时会发生这种情况.之所以会发生这种情况,是因为您对新的Date()构造的输入未定义-或者-因为您可能正在将UTC偏移量处理为无效日期.

这是一个简短的代码段,用于在尽可能少的行中传达确切的错误:

clear();
;(function iif() {
    var d = new Date(undefined);  // .valueOf() === 'Invalid Date'
    console.log('>', d, +d);
    if (isNaN(+d)) return;
    d.toISOString();
    console.log('- executed -');
})();

将其扔到JS控制台中并进行处理-每当在新的Date(未定义)上调用toISOString时,都会重现该错误.如果(isNaN(d))返回;表示“如果UTC时间戳记不是数字,则终止任务”-new Date()与(new Date()).valueOf()相同.

您可以利用的一点:确保您的虚假日期为null或0-不确定或“”(空字符串).

希望这可以帮助!

标签:angularjs,datepicker,javascript,jquery,date
来源: https://codeday.me/bug/20191026/1932703.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有