Есть ли предустановка форматирования для момента «ГГГГ-ММ-ДД» - PullRequest
0 голосов
/ 03 сентября 2018

Я использую момент и большую часть времени мне нужно получить только дату в виде строки, формат для передачи ее в базу данных или, может быть, просто сравнение (момент, помогите мне сравнить, но все же).

Каждый раз, когда мне нужен этот конкретный формат, я должен написать .format('YYYY-MM-DD'), и я хотел бы знать, есть ли предустановка, например, C для полной или I для iso. В документах я ничего не нашел, только интернационализация с вариациями L

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Как определено в этом разделе Длинные форматы даты Вы можете определить формат как:

moment.updateLocale('en', {
    longDateFormat : {
        LT: "h:mm A",
        LTS: "h:mm:ss A",
        L: "MM/DD/YYYY",
        l: "M/D/YYYY",
        LL: "MMMM Do YYYY",
        ll: "MMM D YYYY",
        LLL: "MMMM Do YYYY LT",
        lll: "MMM D YYYY LT",
        LLLL: "dddd, MMMM Do YYYY LT",
        llll: "ddd, MMM D YYYY LT"
    }
});

А затем используйте его, например:

moment().format("L");

Насколько мне известно, это был бы лучший способ установить собственный формат.

0 голосов
/ 03 сентября 2018

В качестве версии 2.20.0 вы можете использовать Специальные форматы (даже если они упомянуты в разделе анализа документов), например, вы можете использовать moment.HTML5_FMT.DATE для получить вывод в формате YYYY-MM-DD:

console.log(moment().format(moment.HTML5_FMT.DATE));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

Если вы хотите, вы также можете настроить формат по умолчанию , чтобы format() (без параметра) отобразить результат в предпочитаемом формате:

console.log(moment().format());
moment.defaultFormat = 'YYYY-MM-DD';
console.log(moment().format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

Или, если хотите, вы можете продлить момент, используя moment.fn, и создать функцию, которая принимает ваши токены (например, 'C' и 'I'):

moment.fn.myFormat = function(token){
  if( token == 'C' ){
    return this.format('YYYY-MM-DD');
  } else if( token == 'I' ){
    return this.toISOString();
  } else {
    return this.format();
  }
}
console.log(moment().myFormat());
console.log(moment().myFormat('C'));
console.log(moment().myFormat('I'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

Прототип Moment доступен через moment.fn. Если вы хотите добавить свои собственные функции, это то место, куда вы их поместите.

0 голосов
/ 03 сентября 2018

Если вы не видите этого в документации (а я тоже нет), это говорит о том, что нет, в Moment нет текущей предустановки для этого.

Вы всегда можете добавить свои собственные:

Object.defineProperty(moment.fn, "myYMD", { // or moment.prototype, they refer to
                                            // the same object according to the docs
    value: function() {
        return this.format("YYYY-MM-DD");
    },
    configurable: true,
    writable: true
});

(Использование Object.defineProperty, потому что я никогда не добавляю перечислимые свойства к прототипам.)

Обратите внимание на префикс в имени метода, чтобы избежать конфликтов с будущими расширениями для Moment.

Пример:

Object.defineProperty(moment.fn, "myYMD", {
    value: function() {
        return this.format("YYYY-MM-DD");
    },
    configurable: true,
    writable: true
});

// using it
console.log(moment().myYMD());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

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

...