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

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

Ответы [ 43 ]

576 голосов
/ 18 июня 2010

Измененный фрагмент кода, который я часто использую:

Date.prototype.yyyymmdd = function() {
  var mm = this.getMonth() + 1; // getMonth() is zero-based
  var dd = this.getDate();

  return [this.getFullYear(),
          (mm>9 ? '' : '0') + mm,
          (dd>9 ? '' : '0') + dd
         ].join('');
};

var date = new Date();
date.yyyymmdd();
284 голосов
/ 23 мая 2013

Мне не понравилось добавление к прототипу. Альтернативой будет:

var rightNow = new Date();
var res = rightNow.toISOString().slice(0,10).replace(/-/g,"");

<!-- Next line is for code snippet output only -->
document.body.innerHTML += res;
156 голосов
/ 10 февраля 2015

Вы можете использовать функцию toISOString:

var today = new Date();
today.toISOString().substring(0, 10);

Это даст вам формат "гггг-мм-дд".

114 голосов
/ 19 августа 2015

Момент.js может быть вашим другом

var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
35 голосов
/ 19 декабря 2013

Если вам не нужно чистое решение JS, вы можете использовать jQuery UI для выполнения такой работы:

$.datepicker.formatDate('yymmdd', new Date());

Я обычно не люблю импортировать слишком много библиотек. Но jQuery UI настолько полезен, что вы, вероятно, будете использовать его где-то еще в своем проекте.

Посетите http://api.jqueryui.com/datepicker/, чтобы получить больше примеров

33 голосов
/ 17 марта 2016

Это одна строка кода, которую вы можете использовать для создания YYYY-MM-DD строки сегодняшней даты.

var d = new Date().toISOString().slice(0,10);
23 голосов
/ 26 мая 2015

В дополнение к ответу oo, я бы хотел порекомендовать отделить логические операции от возврата и вместо них поместить их в тройки в переменные.

Кроме того, используйте concat() для обеспечения безопасной конкатенации переменных

 Date.prototype.yyyymmdd = function() {
   var yyyy = this.getFullYear();
   var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based
   var dd  = this.getDate() < 10 ? "0" + this.getDate() : this.getDate();
   return "".concat(yyyy).concat(mm).concat(dd);
  };

 Date.prototype.yyyymmddhhmm = function() {
   var yyyy = this.getFullYear();
   var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based
   var dd  = this.getDate() < 10 ? "0" + this.getDate() : this.getDate();
   var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
   var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
   return "".concat(yyyy).concat(mm).concat(dd).concat(hh).concat(min);
  };

 Date.prototype.yyyymmddhhmmss = function() {
   var yyyy = this.getFullYear();
   var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based
   var dd  = this.getDate() < 10 ? "0" + this.getDate() : this.getDate();
   var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
   var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
   var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds();
   return "".concat(yyyy).concat(mm).concat(dd).concat(hh).concat(min).concat(ss);
  };

var d = new Date();
d.yyyymmdd();
d.yyyymmddhhmm();
d.yyyymmddhhmmss();

Чуть более сухая скрипка, как предложено RiZKiT

https://jsfiddle.net/EricHerlitz/tuhhfxz9/

19 голосов
/ 06 июня 2016
new Date('Jun 5 2016').
  toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).
  replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');

// => '2016-06-05'
16 голосов
/ 14 июня 2014

Мне не нравится модифицировать нативные объекты, и я думаю, что умножение яснее, чем строка, дополняющая принятое решение.

function yyyymmdd(dateIn) {
   var yyyy = dateIn.getFullYear();
   var mm = dateIn.getMonth()+1; // getMonth() is zero-based
   var dd  = dateIn.getDate();
   return String(10000*yyyy + 100*mm + dd); // Leading zeros for mm and dd
}

var today = new Date();
console.log(yyyymmdd(today));

Скрипка: http://jsfiddle.net/gbdarren/Ew7Y4/

13 голосов
/ 20 ноября 2014

Простое решение JS (ES5) без каких-либо возможных проблем с переходом по дате, вызванных печатью Date.toISOString () в UTC:

var now = new Date();
var todayUTC = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
return todayUTC.toISOString().slice(0, 10).replace(/-/g, '');

Это в ответ на комментарий @ weberste к @Ответ Пьера Гильбера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...