当initialDueDate参数无效javascript时抛出错误

时间:2017-04-18 23:16:01

标签: javascript node.js date momentjs

给定calculateNextDueDateinitialDueDate的函数interval会返回nextDueDate。我还需要这个函数来测试传递的参数的有效性。有什么建议?先感谢您。



const INTERVAL = {
  monthly: moment.duration(1, 'months'),
  quarterly: moment.duration(3, 'months'),
  yearly: moment.duration(1, 'years')
}

function calculateNextDueDate(initialDueDate, intervalCode) {
  if (moment().diff(initialDueDate) < 0)
    return initialDueDate;
  return calculateNextDueDate(initialDueDate.add(INTERVAL[intervalCode]), intervalCode);
}


// usage
console.log(calculateNextDueDate(moment('2016-01-25', 'YYYY-MM-DD'), 'monthly').format('LL'))
console.log(calculateNextDueDate(moment('2016-01-25', 'YYYY-MM-DD'), 'quarterly').format('LL'))
console.log(calculateNextDueDate(moment('2016-01-25', 'YYYY-MM-DD'), 'yearly').format('LL'))
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

根据validation的Moment.js文档,您需要以下内容:

if (!moment(initialDueDate).isValid()) {
  throw new Error('Invalid date: ' + initialDueDate);
}

你不能说 initialDueDate 是什么(Date?string?)。如果它是一个字符串,您还应该向解析器提供字符串的format,否则您依靠moment.js来猜测格式。另请参阅Parsing Guide

&#13;
&#13;
['2017-02-28',  // valid date
 '2017-02-29'   // invalid date
 ].forEach(function(initialDueDate) {
 
  if (!moment(initialDueDate, 'YYYY-MM-DD').isValid()) {
    throw new Error('Invalid date: \'' + initialDueDate + '\'');
 
 } else {
    console.log(initialDueDate + ' is valid');
  }
});
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
&#13;
&#13;
&#13;