Как получить месяц и дату JavaScript в двухзначном формате?

Ответы:

812
("0" + this.getDate()).slice(-2)

на дату и аналогичные:

("0" + (this.getMonth() + 1)).slice(-2)

за месяц.

Хьюго
источник
86
Круто, но: function addZ(n){return n<10? '0'+n:''+n;}немного более универсально.
RobG
9
ломтик умный, но он намного медленнее простого сравнения: jsperf.com/slice-vs-comparison
дак
30
@dak: А когда это реально будет иметь значение? Я сомневаюсь, что ты считаешь месяц тысячи раз в секунду.
Саша Чедыгов
2
@ KasperHoldum– getMonthи getDateвозвращать числа, а не строки. И если требуется совместимость со строками, тогда '0' + Number(n)сделаем свою работу.
RobG
9
@ Саша Чедыгов уверен, что вы могли бы вычислять месяц тысячи раз в секунду, особенно если вы сортируете
Dexygen
87

Если вам нужен формат типа «ГГГГ-ММ-ДДТЧ: мм: сс», то это может быть быстрее:

var date = new Date().toISOString().substr(0, 19);
// toISOString() will give you YYYY-MM-DDTHH:mm:ss.sssZ

Или обычно используемый формат даты и времени MySQL «ГГГГ-ММ-ДД ЧЧ: мм: сс»:

var date2 = new Date().toISOString().substr(0, 19).replace('T', ' ');

надеюсь, это поможет

Qiniso
источник
1
Это самое короткое решение, с которым я столкнулся. Единственная проблема здесь - это смещение часового пояса.
Прайм
3
Смещение часового пояса может быть выполнено с помощью чего-то вроде: var date = new Date (new Date (). GetTime () - new Date (). GetTimezoneOffset () * 60 * 1000) .toISOString (). Substr (0,19) .replace ('T', '');
Прайм
Прайм, твой код работает для меня, но у копирования и вставки должен быть какой-то скрытый символ или что-то подобное, поэтому я просто набрал его вручную.
Spacebread
Я закончил с этим вопросом, пытаясь решить именно эту проблему, поэтому, как оказалось, ваш ответ - то, что мне нужно.
Тост инженера
Обратите внимание, что этот метод будет возвращать дату и время в соответствии с часовым поясом UTC.
Амр
41

Пример за месяц:

function getMonth(date) {
  var month = date.getMonth() + 1;
  return month < 10 ? '0' + month : '' + month; // ('' + month) for string result
}  

Вы также можете расширить Dateобъект такой функцией:

Date.prototype.getMonthFormatted = function() {
  var month = this.getMonth() + 1;
  return month < 10 ? '0' + month : '' + month; // ('' + month) for string result
}
Сергей Метлов
источник
4
Обратите внимание, что getMonth возвращает число от 0 до 11, а не от 1 до 12.
Salman A
4
Это возвращает противоречивые результаты. Для ноября и декабря он возвращает строку, а для других месяцев возвращает число.
Тим Даун
Я обновил код для реализации Salman. Предупреждение о том, что getMonth основан на нуле вместо 1. И добавил кавычки, чтобы строка всегда возвращалась.
Ян Дерк
23

Лучший способ сделать это - создать свой собственный простой форматер (как показано ниже):

getDate()возвращает день месяца (от 1 до 31)
getMonth()возвращает месяц (от 0 до 11 ) <от нуля, 0 = январь, 11 = декабрь
getFullYear() возвращает год (четыре цифры) < не использоватьgetYear()

function formatDateToString(date){
   // 01, 02, 03, ... 29, 30, 31
   var dd = (date.getDate() < 10 ? '0' : '') + date.getDate();
   // 01, 02, 03, ... 10, 11, 12
   var MM = ((date.getMonth() + 1) < 10 ? '0' : '') + (date.getMonth() + 1);
   // 1970, 1971, ... 2015, 2016, ...
   var yyyy = date.getFullYear();

   // create the format you want
   return (dd + "-" + MM + "-" + yyyy);
}
завивать волосы щипцами
источник
20

Почему бы не использовать padStart?

var dt = new Date();

year  = dt.getYear() + 1900;
month = (dt.getMonth() + 1).toString().padStart(2, "0");
day   = dt.getDate().toString().padStart(2, "0");

console.log(year + '/' + month + '/' + day);

Это всегда будет возвращать двузначные числа, даже если месяц или день меньше 10.

Ноты:

  • Это будет работать только с Internet Explorer, если код js передается с помощью babel .
  • getYear() возвращает год с 1900 года и не требует padStart .
  • getMonth() возвращает месяц от 0 до 11
    • 1 добавляется к месяцу перед заполнением, чтобы сохранить его от 1 до 12
  • getDate() возвращает день с 1 по 31
    • 7-й день вернется, 07поэтому нам не нужно добавлять 1 перед заполнением строки.
SomeGuyOnAComputer
источник
1
Ага. Это включено в ссылку MDN выше. Если вы используете babel для транспорта, у вас не должно быть проблем.
SomeGuyOnAComputer
10

Следующее используется для преобразования формата даты db2, то есть ГГГГ-ММ-ДД, используя троичный оператор

var currentDate = new Date();
var twoDigitMonth=((currentDate.getMonth()+1)>=10)? (currentDate.getMonth()+1) : '0' + (currentDate.getMonth()+1);  
var twoDigitDate=((currentDate.getDate())>=10)? (currentDate.getDate()) : '0' + (currentDate.getDate());
var createdDateTo = currentDate.getFullYear() + "-" + twoDigitMonth + "-" + twoDigitDate; 
alert(createdDateTo);
Гнанасекаран Эбинезар
источник
7

Я бы сделал это:

var d = new Date('January 13, 2000');
var s = d.toLocaleDateString('en-US', { month: '2-digit', day: '2-digit', year: 'numeric' });
console.log(s); // prints 01/13/2000

Фернандо Веццали
источник
6
function monthFormated(date) {
   //If date is not passed, get current date
   if(!date)
     date = new Date();

     month = date.getMonth();

    // if month 2 digits (9+1 = 10) don't add 0 in front 
    return month < 9 ? "0" + (month+1) : month+1;
}
ssamuel68
источник
6

Еще один пример, почти один лайнер.

var date = new Date();
console.log( (date.getMonth() < 9 ? '0': '') + (date.getMonth()+1) );

Andrés
источник
5
function monthFormated() {
  var date = new Date(),
      month = date.getMonth();
  return month+1 < 10 ? ("0" + month) : month;
}
Мохсен
источник
5

Если бы это могло сэкономить время, я искал:

YYYYMMDD

на сегодня и ладили с:

const dateDocumentID = new Date()
  .toISOString()
  .substr(0, 10)
  .replace(/-/g, '');
Сумасшедший Барни
источник
2
Ответ аккуратный. Ибо DD/MM/YYя пошел наnew Date().toISOString().substr(0, 10).split('-').reverse().map(x => x.substr(0, 2)).join('/')
Макс Ма
4

Это было мое решение:

function leadingZero(value) {
  if (value < 10) {
    return "0" + value.toString();
  }
  return value.toString();
}

var targetDate = new Date();
targetDate.setDate(targetDate.getDate());
var dd = targetDate.getDate();
var mm = targetDate.getMonth() + 1;
var yyyy = targetDate.getFullYear();
var dateCurrent = leadingZero(mm) + "/" + leadingZero(dd) + "/" + yyyy;
Джон
источник
4

Используя Moment.js это можно сделать так:

moment(new Date(2017, 1, 1)).format('DD') // day
moment(new Date(2017, 1, 1)).format('MM') // month
Александр Сушкевич
источник
3

Не ответ, но вот как я получаю требуемый формат даты в переменной

function setDateZero(date){
  return date < 10 ? '0' + date : date;
}

var curr_date = ev.date.getDate();
var curr_month = ev.date.getMonth() + 1;
var curr_year = ev.date.getFullYear();
var thisDate = curr_year+"-"+setDateZero(curr_month)+"-"+setDateZero(curr_date);

Надеюсь это поможет!

foxybagga
источник
2

Совет от MDN :

function date_locale(thisDate, locale) {
  if (locale == undefined)
    locale = 'fr-FR';
  // set your default country above (yes, I'm french !)
  // then the default format is "dd/mm/YYY"

  if (thisDate == undefined) {
    var d = new Date();
  } else {
    var d = new Date(thisDate);
  }
  return d.toLocaleDateString(locale);
}

var thisDate = date_locale();
var dayN = thisDate.slice(0, 2);
var monthN = thisDate.slice(3, 5);
console.log(dayN);
console.log(monthN);

http://jsfiddle.net/v4qcf5x6/

Laurent Belloeil
источник
2

new Date().getMonth() метод возвращает месяц в виде числа (0-11)

С помощью этой функции вы можете легко исправить номер месяца.

function monthFormatted() {
  var date = new Date(),
      month = date.getMonth();
  return month+1 < 10 ? ("0" + month) : month;
}
Мехмет Озкан ЯВУЗ
источник
1
function GetDateAndTime(dt) {
  var arr = new Array(dt.getDate(), dt.getMonth(), dt.getFullYear(),dt.getHours(),dt.getMinutes(),dt.getSeconds());

  for(var i=0;i<arr.length;i++) {
    if(arr[i].toString().length == 1) arr[i] = "0" + arr[i];
  }

  return arr[0] + "." + arr[1] + "." + arr[2] + " " + arr[3] + ":" + arr[4] + ":" + arr[5]; 
}
Эмра Кайнар
источник
1

И еще одна версия здесь https://jsfiddle.net/ivos/zcLxo8oy/1/ , надеюсь быть полезной.

var dt = new Date(2016,5,1); // just for the test
var separator = '.';
var strDate = (dt.getFullYear() + separator + (dt.getMonth() + 1) + separator + dt.getDate());
// end of setup

strDate = strDate.replace(/(\b\d{1}\b)/g, "0$1")
i100
источник
1

Ответы здесь были полезны, однако мне нужно нечто большее: не только месяц, дата, месяц, часы и секунды для имени по умолчанию.

Интересно, что хотя предварительное значение «0» было необходимо для всего вышеперечисленного, «+ 1» было необходимо только для месяца, а не для других.

Как пример:

("0" + (d.getMonth() + 1)).slice(-2)     // Note: +1 is needed
("0" + (d.getHours())).slice(-2)         // Note: +1 is not needed
Манохар Редди Поредди
источник
0

Мое решение:

function addLeadingChars(string, nrOfChars, leadingChar) {
    string = string + '';
    return Array(Math.max(0, (nrOfChars || 2) - string.length + 1)).join(leadingChar || '0') + string;
}

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

var
    date = new Date(),
    month = addLeadingChars(date.getMonth() + 1),
    day = addLeadingChars(date.getDate());

jsfiddle: http://jsfiddle.net/8xy4Q/1/

user3336882
источник
0
var net = require('net')

function zeroFill(i) {
  return (i < 10 ? '0' : '') + i
}

function now () {
  var d = new Date()
  return d.getFullYear() + '-'
    + zeroFill(d.getMonth() + 1) + '-'
    + zeroFill(d.getDate()) + ' '
    + zeroFill(d.getHours()) + ':'
    + zeroFill(d.getMinutes())
}

var server = net.createServer(function (socket) {
  socket.end(now() + '\n')
})

server.listen(Number(process.argv[2]))
Чи Нгуен
источник
0

если вы хотите, чтобы функция getDate () возвращала дату как 01 вместо 1, вот код для нее .... Предположим, что сегодняшняя дата - 01-11-2018

var today = new Date();
today = today.getFullYear()+ "-" + (today.getMonth() + 1) + "-" + today.getDate();      
console.log(today);       //Output: 2018-11-1


today = today.getFullYear()+ "-" + (today.getMonth() + 1) + "-" + ((today.getDate() < 10 ? '0' : '') + today.getDate());
console.log(today);        //Output: 2018-11-01
Jayanth G
источник
0

Я хотел сделать что-то вроде этого, и это то, что я сделал

PS Я знаю, что есть правильный ответ (ы) сверху, но просто хотел добавить что-то свое

const todayIs = async () =>{
    const now = new Date();
    var today = now.getFullYear()+'-';
    if(now.getMonth() < 10)
        today += '0'+now.getMonth()+'-';
    else
        today += now.getMonth()+'-';
    if(now.getDay() < 10)
        today += '0'+now.getDay();
    else
        today += now.getDay();
    return today;
}
Мохид Кази
источник
слишком много усилий Не так ли?
Ахмеднавазбутт
0

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

(m = new Date().getMonth() + 1) < 10 ? `0${m}` : `${m}`
selmansamet
источник
0
currentDate(){
        var today = new Date();
        var dateTime =  today.getFullYear()+'-'+
                        ((today.getMonth()+1)<10?("0"+(today.getMonth()+1)):(today.getMonth()+1))+'-'+
                        (today.getDate()<10?("0"+today.getDate()):today.getDate())+'T'+
                        (today.getHours()<10?("0"+today.getHours()):today.getHours())+ ":" +
                        (today.getMinutes()<10?("0"+today.getMinutes()):today.getMinutes())+ ":" +
                        (today.getSeconds()<10?("0"+today.getSeconds()):today.getSeconds());        
            return dateTime;
},
Арун Верма
источник
0

Я бы предложил вам использовать другую библиотеку под названием Moment https://momentjs.com/

Таким образом, вы можете форматировать дату напрямую, без необходимости выполнять дополнительную работу

const date = moment().format('YYYY-MM-DD')
// date: '2020-01-04'

Убедитесь, что вы импортируете момент, чтобы иметь возможность использовать его.

yarn add moment 
# to add the dependency
import moment from 'moment' 
// import this at the top of the file you want to use it in

Надеюсь, это поможет: D

Саша Ларсон
источник
1
Moment.js уже был предложен; но ваш совет все еще полон и полезен.
Ind
0
$("body").delegate("select[name='package_title']", "change", function() {

    var price = $(this).find(':selected').attr('data-price');
    var dadaday = $(this).find(':selected').attr('data-days');
    var today = new Date();
    var endDate = new Date();
    endDate.setDate(today.getDate()+parseInt(dadaday));
    var day = ("0" + endDate.getDate()).slice(-2)
    var month = ("0" + (endDate.getMonth() + 1)).slice(-2)
    var year = endDate.getFullYear();

    var someFormattedDate = year+'-'+month+'-'+day;

    $('#price_id').val(price);
    $('#date_id').val(someFormattedDate);
});
sbcharya
источник