从momentjs

时间:2017-02-06 20:02:18

标签: momentjs

我使用momentjs处理项目中的日期,以便当用户输入M/D/YYYY格式的日期以恢复为MM/DD/YYYY格式时(例如2/5/2017到{{ 1}})。我还将任何比今天更大的无效日期或日期转换回今天的日期。

02/05/2017

据我所知,这与我上面的代码完全一致。但无论工作功能如何,我都会收到非ISO日期的弃用警告。我的想法是使用element.on("blur", function() { var currentDate = moment().format('MM/DD/YYYY'); var formattedInput; if (ctrl.$modelValue !== undefined && ctrl.$modelValue !== "") { if(moment(ctrl.$modelValue, "MM/DD/YYYY", true).isValid()) { formattedInput = moment(ctrl.$modelValue); formattedInput.format('MM/DD/YYYY'); if (formattedInput.isAfter(currentDate)) { ctrl.$setViewValue(currentDate); ctrl.$render(); } } else if (moment(ctrl.$modelValue, "M/D/YYYY", true).isValid()) { formattedInput = moment(ctrl.$modelValue); formattedInput.format('MM/DD/YYYY'); if (formattedInput.isAfter(currentDate)) { ctrl.$setViewValue(currentDate); ctrl.$render(); } else { ctrl.$setViewValue(formattedInput.format('MM/DD/YYYY')); ctrl.$render(); } } else { ctrl.$setViewValue(currentDate); ctrl.$render(); } } }); 格式,但由于业务需求,这是不可更改的。有没有办法以非繁琐的方式解决这个问题?

1 个答案:

答案 0 :(得分:2)

问题出在formattedInput = moment(ctrl.$modelValue)这里,您正在使用非ISO日期的格式解析。要删除弃用警告,只需在moment(ctrl.$modelValue, "MM/DD/YYYY")条件下使用moment(ctrl.$modelValue, "M/D/YYYY")if

您的完整代码如下:

element.on("blur", function() {
  var currentDate = moment();
  var formattedInput;

  if (ctrl.$modelValue !== undefined && ctrl.$modelValue !== "") {

    if(moment(ctrl.$modelValue, "MM/DD/YYYY", true).isValid()) {
      formattedInput = moment(ctrl.$modelValue, "MM/DD/YYYY", true);
      // This line returns a string, but does not assign to value, so it's superfluous
      //formattedInput.format('MM/DD/YYYY');
      if (formattedInput.isAfter(currentDate)) {
         ctrl.$setViewValue(currentDate.format('MM/DD/YYYY'));
         ctrl.$render();
      }
    } else if (moment(ctrl.$modelValue, "M/D/YYYY", true).isValid()) {
      formattedInput = moment(ctrl.$modelValue, "M/D/YYYY", true);
      // see previous comment
      //formattedInput.format('MM/DD/YYYY');
      if (formattedInput.isAfter(currentDate)) {
        ctrl.$setViewValue(currentDate.format('MM/DD/YYYY'));
        ctrl.$render();
      } else {
        ctrl.$setViewValue(formattedInput.format('MM/DD/YYYY'));
        ctrl.$render();
      }
    } else {
      ctrl.$setViewValue(currentDate.format('MM/DD/YYYY'));
      ctrl.$render();
    }
  }
});

请务必完全理解moment parsing(从字符串构建时刻对象)和时刻format之间的区别(显示时刻对象的字符串表示)。