Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
400 views
in Technique[技术] by (71.8m points)

how to handle deprecation warning in momentjs

I want to use momentjs to check for invalid date/time strings:

var invalid = '2017-03-18 23;00;00';
if (moment(invalid).isValid()) {
  return 'valid date'
}

This (correctly) throws a stacktrace with the familiar 'Deprecation warning: value provided is not in a recognized RFC2822 or ISO format......'

But even if I add a try/catch:

try {
  var invalid = '2017-03-18 23;00;00';
  if (moment(invalid).isValid()) {
    return 'valid date'
  }
catch (err) {
  throw Error ('invalid date format');
}

the stacktrace is still printed. What do I need to do to avoid the stacktrace from being printed?

I've searched all similar questions on StackOverflow but they all try to solve a different problem (fixing the input or finding the correct syntax to parse the input).

I using v2.18.1.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You have to use moment(String, String); to parse your input. If you don't want to specify a format (or an array of formats), you can use moment.ISO_8601. As the docs says:

Moment already supports parsing iso-8601 strings, but this can be specified explicitly in the format/list of formats when constructing a moment

This way you will not have deprecation warning. Here a working example:

var invalid = '2017-03-18 23;00;00';
if (moment(invalid, moment.ISO_8601).isValid()) {
  console.log('valid date');
} else {
  console.log('invalid date');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...