Как отформатировать дату как ISO 8601 в moment.Джей?



эти документы упоминают moment.ISO_8601 в качестве опции форматирования (от 2.7.0 -http://momentjs.com/docs/#/parsing/special-formats/), но ни один из них не работает (даже 2.7.0):



var date = moment();
date.format(moment.ISO_8601); // error
moment.format(date, moment.ISO_8601); // error


(http://jsfiddle.net/b3d6uy05/1/)



Как я могу получить ISO 8601 с момента.Джей?

510   5  

5 ответов:

moment().toISOString(); // or format() - see below

http://momentjs.com/docs/#/displaying/as-iso-string/

обновление Основываясь на ответе: @sennet и комментарии @dvlsg (см. Скрипка) следует отметить, что есть разница между format и toISOString. Оба верны, но основной процесс отличается. toISOString преобразует в объект даты, устанавливает в UTC, затем использует собственную функцию прототипа даты для вывода ISO8601 в UTC с миллисекундами (YYYY-MM-DD[T]HH:mm:ss.SSS[Z]). С другой стороны, format использует формат по умолчанию (YYYY-MM-DDTHH:mm:ssZ) без миллисекунд и поддерживает смещение часового пояса.

Я открыл вопрос как мне кажется, это может привести к неожиданным результатам.

использовать format без параметров:

var date = moment();
date.format(); // "2014-09-08T08:02:17-05:00"

(http://jsfiddle.net/8gvhL1dz/)

также возможно с vanilla JS

new Date().toISOString() // "2017-08-26T16:31:02.349Z"

Если вы просто хотите часть даты (например, 2017-06-27), и вы хотите, чтобы он работал независимо от часового пояса, а также на арабском языке, Вот код, который я написал:

function isoDate(date) {
    if (!date) {
        return null
    }
    date = moment(date).toDate()

    // don't call toISOString because it takes the time zone into
    // account which we don't want.  Also don't call .format() because it
    // returns Arabic instead of English

    var month = 1 + date.getMonth()
    if (month < 10) {
        month = '0' + month
    }
    var day = date.getDate()
    if (day < 10) {
        day = '0' + day
    }
    return date.getFullYear() + '-' + month + '-' + day
}

когда вы используете Мангуст для хранения дат в MongoDB, вам нужно использовать toISOString (), потому что все даты хранятся как Изодаты с миллисекундами.

moment.format() 

2018-04-17T20:00:00Z

moment.toISOString() -> USE THIS TO STORE IN MONGOOSE

2018-04-17T20:00:00.000Z

Comments

    Ничего не найдено.