Получить строку в формате YYYYMMDD из объекта даты JS?

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

Ответ 1

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

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();

Ответ 2

Мне не нравилось добавлять в прототип. Альтернативой может быть:

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;

Ответ 3

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

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

Он даст вам формат "yyyy-mm-dd".

Ответ 4

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

var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');

Ответ 5

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

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

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

Посетите http://api.jqueryui.com/datepicker/ для получения дополнительных примеров

Ответ 6

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

var d = new Date().toISOString().slice(0,10);

Ответ 7

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

Кроме того, используйте 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();

Немного больше DRY скрипта, как предложено RiZKiT

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

Ответ 8

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

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));

Fiddle: http://jsfiddle.net/gbdarren/Ew7Y4/

Ответ 9

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'

Ответ 10

Plain 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 на ответ @Pierre Guilbert.

Ответ 11

// UTC/GMT 0
document.write('UTC/GMT 0: ' + (new Date()).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812013509

// Client local time
document.write('<br/>Local time: ' + (new Date(Date.now()-(new Date()).getTimezoneOffset() * 60000)).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812113509

Ответ 12

var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);

console.log(dateFormated);

Ответ 13

Немного упрощенная версия для наиболее популярного ответа в этом потоке fooobar.com/questions/25093/...:

function toYYYYMMDD(d) {
    var yyyy = d.getFullYear().toString();
    var mm = (d.getMonth() + 101).toString().slice(-2);
    var dd = (d.getDate() + 100).toString().slice(-2);
    return yyyy + mm + dd;
}

Ответ 14

Этот код исправляет ответ Пьера Гильберта:

(он работает даже через 10000 лет)

YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"")

Ответ 15

Другим способом является использование toLocaleDateString с языковой toLocaleDateString, имеющей стандарт формата даты в формате big-endian, такой как Швеция, Литва, Венгрия, Южная Корея,...:

date.toLocaleDateString('se')

Удаление разделителей (-) - это просто замена не цифр:

console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );

Ответ 16

Вы можете просто использовать этот код для получения даты в году

var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();

Ответ 17

Этот парень здесь = > http://blog.stevenlevithan.com/archives/date-time-format написал функцию format() для объекта Javascript Date, поэтому его можно использовать со знакомыми буквальными форматами.

Если вам нужно полнофункциональное форматирование даты в вашем приложении Javascript, используйте его. В противном случае, если вы хотите сделать одно, то конкатенация getYear(), getMonth(), getDay(), вероятно, проще всего.

Ответ 18

Кажется, что mootools предоставляют Date(). format(): http://mootools.net/docs/more/Native/Date

Я не уверен, что это стоит включить только для этой конкретной задачи.

Ответ 19

Работа с @o-o отвечает, это вернет вам строку даты в соответствии со строкой формата. Вы можете легко добавить двузначное число года в год и миллисекунды, и если это вам понадобится.

Date.prototype.getFromFormat = function(format) {
    var yyyy = this.getFullYear().toString();
    format = format.replace(/yyyy/g, yyyy)
    var mm = (this.getMonth()+1).toString(); 
    format = format.replace(/mm/g, (mm[1]?mm:"0"+mm[0]));
    var dd  = this.getDate().toString();
    format = format.replace(/dd/g, (dd[1]?dd:"0"+dd[0]));
    var hh = this.getHours().toString();
    format = format.replace(/hh/g, (hh[1]?hh:"0"+hh[0]));
    var ii = this.getMinutes().toString();
    format = format.replace(/ii/g, (ii[1]?ii:"0"+ii[0]));
    var ss  = this.getSeconds().toString();
    format = format.replace(/ss/g, (ss[1]?ss:"0"+ss[0]));
    return format;
};

d = new Date();
var date = d.getFromFormat('yyyy-mm-dd hh:ii:ss');
alert(date);

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

Ответ 20

Я обычно использую код ниже, когда мне нужно это делать.

var date = new Date($.now());
var dateString = (date.getFullYear() + '-'
    + ('0' + (date.getMonth() + 1)).slice(-2)
    + '-' + ('0' + (date.getDate())).slice(-2));
console.log(dateString); //Will print "2015-09-18" when this comment was written

Чтобы объяснить,.slice(-2) дает нам последние два символа строки.

Поэтому, несмотря ни на что, мы можем добавить "0" в день или месяц, и просто попросить последние два, так как они всегда те, которые мы хотим.

Итак, если MyDate.getMonth() возвращает 9, это будет:

("0" + "9") // Giving us "09"

поэтому добавление .slice(-2) на этом дает нам последние два символа, которые:

("0" + "9").slice(-2)

"09"

Но если date.getMonth() возвращает 10, это будет:

("0" + "10") // Giving us "010"

поэтому добавление .slice(-2) дает нам последние два символа или:

("0" + "10").slice(-2)

"10"

Ответ 21

dateformat - очень полезный пакет, и я считаю его более надежным и простым в использовании, чем moment.js.

Как использовать:

Загрузите и установите dateformat из NPM. Требовать его в своем модуле:

var dateFormat = require('dateformat');

а затем просто отформатируйте свой материал:

var myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');

Ответ 22

Если вы используете AngularJs (до 1,5), вы можете использовать фильтр даты :

var formattedDate = $filter('date')(myDate, 'yyyyMMdd')

Ответ 23

Если вы не возражаете, включая дополнительную (но небольшую) библиотеку, Sugar.js предоставляет множество приятных функций для работы с dates в JavaScript. Чтобы отформатировать дату, используйте функцию format:

new Date().format("{yyyy}{MM}{dd}")

Ответ 24

Ответ на другой для простоты и удобочитаемости.
Также не рекомендуется редактировать существующие предопределенные члены класса с помощью новых методов:

function getDateInYYYYMMDD() {
    let currentDate = new Date();

    // year
    let yyyy = '' + currentDate.getFullYear();

    // month
    let mm = ('0' + (currentDate.getMonth() + 1));  // prepend 0 // +1 is because Jan is 0
    mm = mm.substr(mm.length - 2);                  // take last 2 chars

    // day
    let dd = ('0' + currentDate.getDate());         // prepend 0
    dd = dd.substr(dd.length - 2);                  // take last 2 chars

    return yyyy + "" + mm + "" + dd;
}

var currentDateYYYYMMDD = getDateInYYYYMMDD();
console.log('currentDateYYYYMMDD: ' + currentDateYYYYMMDD);

Ответ 25

yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));

Ответ 27

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

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

// monkey patch version
Date.prototype.IsoNum = function (n) {
    var tzoffset = this.getTimezoneOffset() * 60000; //offset in milliseconds
    var localISOTime = (new Date(this - tzoffset)).toISOString().slice(0,-1);
    return localISOTime.replace(/[-T:\.Z]/g, '').substring(0,n || 20); // YYYYMMDD
}

Использование

var d = new Date();
// Tue Jul 28 2015 15:02:53 GMT+0200 (W. Europe Daylight Time)
console.log(d.IsoNum(8));  // "20150728"
console.log(d.IsoNum(12)); // "201507281502"
console.log(d.IsoNum());   // "20150728150253272"

Ответ 28

Нативный Javascript:

new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');

Ответ 29

Как насчет Day.js?

Это всего 2 КБ, и вы можете также dayjs().format('YYYY-MM-DD').

https://github.com/iamkun/dayjs

Ответ 30

Вот небольшое улучшение ответа от https://stackoverflow.com/users/318563/o-o

Date.prototype.ddmmyyyy = function(delimiter) {
    var yyyy = this.getFullYear().toString();
    var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
    var dd  = this.getDate().toString();
    return (dd[1]?dd:"0"+dd[0]) + delimiter + (mm[1]?mm:"0"+mm[0]) + delimiter +yyyy  ; // padding
};

Надеемся быть полезными для всех!

:)