我使用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();
}
}
});
格式,但由于业务需求,这是不可更改的。有没有办法以非繁琐的方式解决这个问题?
答案 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
之间的区别(显示时刻对象的字符串表示)。