Получить строку в формате ГГГГММДД из объекта даты JS? - PullRequest
342 голосов
/ 18 июня 2010

Я пытаюсь использовать JS, чтобы превратить date object в строку в формате YYYYMMDD. Есть ли более простой способ, чем объединение Date.getYear(), Date.getMonth() и Date.getDay()?

Ответы [ 43 ]

0 голосов
/ 16 января 2017

Чтобы получить локальную дату в формате ГГГГММДД, я использую:

var todayDate = (new Date()).toLocaleString('en-GB').slice(0,10).split("\/").reverse().join("");
0 голосов
/ 04 декабря 2018

Конечно, вы можете создать определенную функцию для каждого варианта представления строки даты. Если вы рассматриваете международные форматы дат, вы получаете десятки специальных функций со смешными именами, которые трудно различить.

Нет разумной функции, которая соответствует всем форматам, но есть разумная композиция функций, которая делает:

const pipe2 = f => g => x =>
  g(f(x));

const pipe3 = f => g => h => x =>
  h(g(f(x)));

const invoke = (method, ...args) => o =>
  o[method] (...args);

const padl = (c, n) => s =>
  c.repeat(n)
    .concat(s)
    .slice(-n);

const inc = n => n + 1;

// generic format date function

const formatDate = stor => (...args) => date =>
  args.map(f => f(date))
    .join(stor);

// MAIN

const toYYYYMMDD = formatDate("") (
  invoke("getFullYear"),
  pipe3(invoke("getMonth")) (inc) (padl("0", 2)),
  pipe2(invoke("getDate")) (padl("0", 2)));

console.log(toYYYYMMDD(new Date()));

Да, это много кода. Но вы можете выразить буквально каждое строковое представление даты, просто изменив аргументы функции, переданные функции более высокого порядка formatDate. Все ясно и декларативно, то есть вы можете почти прочитать, что происходит.

0 голосов
/ 13 августа 2015

этот пост помог мне написать этот помощник, поэтому я поделюсь им на случай, если кто-нибудь ищет это решение, оно поддерживает все варианты гггг, мм, дд

Date.prototype.formattedDate = function (pattern) {
    formattedDate = pattern.replace('yyyy', this.getFullYear().toString());
    var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based
    mm = mm.length > 1 ? mm : '0' + mm;
    formattedDate = formattedDate.replace('mm', mm);
    var dd = this.getDate().toString();
    dd = dd.length > 1 ? dd : '0' + dd;
    formattedDate = formattedDate.replace('dd', dd);
    return formattedDate;
};

d = new Date();
pattern = 'yyyymmdd';  // 20150813
d.formattedDate(pattern);

pattern = 'yyyy-mm-dd';
d.formattedDate(pattern); // 2015-08-13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...