尝试使用时刻格式化日期变量,并将其传递给datetimepicker,这将导致弃用警告

问题描述 投票:1回答:1

我正在尝试格式化日期变量,并将其传递给eonasdan datetimepicker以获取角度,但是无论我如何尝试都可以得到

弃用警告:片刻构造回落到js日期。不建议这样做,并将在即将发布的主要版本中将其删除。有关更多信息,请参考https://github.com/moment/moment/issues/1407。参数:

下面是我的试用:

来自ajax的日期-2017年7月5日,星期三00:00:00 GMT

/*example1*/
angular.forEach(tickets, function(value, key){
    $scope.startDate = new Date(value.start_date);
    $scope.endDate = new Date(value.end_date);
});

/*example2*/
angular.forEach(tickets, function(value, key){
    $scope.startDate = moment(startDate, "YYYY-MM-DD");
    $scope.endDate = moment(value.end_date, "YYYY-MM-DD");
});

这里是日期时间选择器选项

$scope.calendarWidgetOptions = {
   format: 'YYYY-MM-DD',
   minDate: moment().startOf('d')
};

我尝试了其他方法,但无法使其正常工作,并且摆脱了过时警告,因此在某些浏览器/时区中现在可以看到日期。

javascript angularjs date eonasdan-datetimepicker
1个回答
1
投票

隐含的问题是“为什么我会收到此过时警告”,而答案是因为您以不推荐使用的方式使用了矩函数,并且不再得到正式支持。

通过您提供的链接:

“ ...使用非iso字符串的矩构造已被弃用。这意味着您可以安全地执行此操作...”

> moment("2014-04-25T01:32:21.196Z");  // iso string, utc timezone
> moment("2014-04-25T01:32:21.196+0600");  // iso string with timezone
> moment("2014 04 25", "YYYY MM DD"); // string with format

您正在这样呼叫时刻:

moment(value.end_date, "YYYY-MM-DD");

哪个不完全符合上面列出的严格签名之一,因此将由模糊处理程序处理,该处理程序试图解析传入的任何值并返回可用的东西,这是已过时的功能。

也许可以通过完全匹配格式化程序来解决此问题:

moment(value.end_date, "YYYY MM DD");

但是,如果您还希望将Date对象传递给力矩,则当它看起来像是一个字符串时,因此,您最可能想要的就是将Date转换为字符串,然后将其和正确的格式化程序传递给力矩。

moment(value.end_date.toISOString(), "YYYY MM DD");

moment(value.end_date.toISOString());

这将有效地提交类似这样的内容:

moment("2017-07-05T17:22:49.396Z", "YYYY MM DD");

moment("2017-07-05T17:22:49.396Z");

并且这确实符合预期的签名,不应引发警告。

© www.soinside.com 2019 - 2024. All rights reserved.