moment construction falls back to js Date

moment construction falls back to js Date

本文关键字:js Date to back construction falls moment      更新时间:2023-09-26

我使用daterangepickermoment来选择不同的范围。我需要动态设置startDateendDate

html.erb文件中:

<%if params[:campaign_report].present? && params[:campaign_report]["daterange"].present?%>
  <%date_range= params[:campaign_report]["daterange"].split("-")%>
  <%= @start_date= Date.parse(date_range[0]).strftime("%Y/%m/%d")%>
  <%= @end_date= Date.parse(date_range[1]).strftime("%Y/%m/%d")%>
<%else%>
  <%= @start_date= Date.parse(@daterange).strftime("%Y/%m/%d")%>
  <%= @end_date= Date.parse(@daterange).strftime("%Y/%m/%d")%>
<%end%>
<script type="text/javascript">
$(function() {
  function report_form_submit(start, end) {
    $('#daterange').val(start.format('MMM D, YYYY') + ' - ' + end.format('MMM D, YYYY'));
    $("#campaign_report_daterange").val($("#daterange").val())
    $("#daily_filter_form").submit();
  }
  $('#daterange').daterangepicker({
    ranges: {
      'Today': [moment(), moment()],
      'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
      'Last 7 Days': [moment().subtract(6, 'days'), moment()],
      'Last 30 Days': [moment().subtract(29, 'days'), moment()],
      'This Month': [moment().startOf('month'), moment().endOf('month')],
      'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
    },
    startDate: moment('<%= @start_date%>'),
    endDate: moment('<%= @end_date%>')
  }, report_form_submit);
});
.....

我在浏览器控制台收到警告,如:

弃用警告:moment构造回落到js Date。这是不鼓励的,并将在即将发布的主要版本中删除。更多信息请访问https://github.com/moment/moment/issues/1407。

按照警告中的链接给出的指示:使用时刻解析指定格式。

如文档所说:

警告:浏览器对解析字符串的支持不一致。因为没有规范说明应该支持哪些格式,所以在某些浏览器中有效的内容在其他浏览器中可能不起作用。

为了解析除ISO 8601字符串之外的任何内容的一致结果,您应该使用String + Format。

在你的情况下,你必须使用:

startDate: moment('<%= @start_date%>', 'YYYY/MM/DD'),
endDate: moment('<%= @end_date%>', 'YYYY/MM/DD')