Arturo Aviles
Arturo Aviles

Reputation: 349

MomentJS can't convert a date with format YYYY-MM-DD HH:mm:ss.fff Z

I am trying to convert the next date using MomentJS:

const moment = require('moment');

var datetime = "2017-11-19 02:45:22.011 +00:00";
var newDate = moment(datetime);

But it fails and the next message appears:

Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.

Snippet showing the issue:

var datetime = "2017-11-19 02:45:22.011 +00:00";
var newDate = moment(datetime);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.2/moment.min.js"></script>

I also tried using:

moment.utc(datetime); 

but failed.

Upvotes: 1

Views: 3187

Answers (2)

VincenzoC
VincenzoC

Reputation: 31502

As moment(String) docs says:

When creating a moment from a string, we first check if the string matches known ISO 8601 formats, we then check if the string matches the RFC 2822 Date time format before dropping to the fall back of new Date(string) if a known format is not found.

2017-11-19 02:45:22.011 +00:00 is not in ISO 8601 compliant format because there is a space between fractional seconds and UTC offset (2017-11-19 02:45:22.011+00:00 is an ISO 8601 version of your input). So you can use moment(String, String), here a live sample:

var datetime = "2017-11-19 02:45:22.011 +00:00";
var newDate = moment(datetime, 'YYYY-MM-DDTHH:mm:ss.fff Z');
console.log(newDate.format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.2/moment.min.js"></script>

Upvotes: 2

Arturo Aviles
Arturo Aviles

Reputation: 349

Reformatting the date string from:

2017-11-19 02:45:22.011 +00:00

To:

2017-11-19T02:45:22.011Z

Solved it

Upvotes: 0

Related Questions