如何获取2位数格式的JavaScript的月份和日期?


Answers:


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

日期,类似:

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

这个月。


86
很酷,但是:function addZ(n){return n<10? '0'+n:''+n;}更通用。
RobG

9
slice很聪明,但是比简单的比较要慢得多:jsperf.com/slice-vs-comparison
dak 2012年

30
@dak:那什么时候才有意义呢?我怀疑您是否正在每秒计算数千次该月。
Sasha Chedygov

2
@KasperHoldum – getMonthgetDate返回数字,而不是字符串。并且如果需要与Strings兼容,则'0' + Number(n)可以完成工作。
RobG

9
@Sasha Chedygov确保您可以每秒计算一次数千次,尤其是如果您正在排序
Dexygen 2013年

87

如果您想要类似“ YYYY-MM-DDTHH:mm:ss”的格式,则可能会更快:

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

或常用的MySQL日期时间格式“ YYYY-MM-DD HH:mm:ss”:

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

我希望这有帮助


1
这是我遇到的最好的解决方案。这里唯一的问题是时区偏移量。
Praym

3
时区偏移量可以通过以下方式解决:var date = new Date(new Date()。getTime()-new Date()。getTimezoneOffset()* 60 * 1000).toISOString()。substr(0,19) .replace('T','');
Praym

Praym,您的代码对我有用,但是复制和粘贴必须具有一些隐藏的字符或某些内容,因此我只需要手工键入即可。
spacebread

我最终遇到了这个问题,试图解决这个确切的问题,因此,事实证明,您的答案就是我所需要的。
Engineer Toast

请注意,此方法将根据UTC时区返回日期和时间。
Amr

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
注意,得到月返回0和11,而不是1和12之间的数
萨勒曼甲

4
这将返回不一致的结果。对于11月和12月,它将返回字符串,而对于其他月份,将返回数字。
Tim Down

我更新了代码以实现Salman A警告,getMonth是从零开始而不是从1开始的,并添加了引号以确保始终返回字符串。
Jan Derk 2015年

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,也将始终返回2位数字。

笔记:

  • 仅当使用babel转译js代码时,这才适用于Internet Explorer
  • getYear() 返回1900年的年份,不需要 padStart
  • getMonth() 返回0到11的月份。
    • 在填充前的月份中加1,以保持1到12
  • getDate() 返回1到31之间的日期。
    • 第7天将返回07,因此我们无需在填充字符串之前加1。

1
对。它包含在上面的MDN链接中。如果您使用babel进行转载,那应该没有问题。
SomeGuyOnAComputer

9

以下用于使用三元运算符转换db2日期格式,即YYYY-MM-DD

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

6

只是另一个例子,几乎有一个班轮。

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


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('/')
Max Ma

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;


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

希望这可以帮助!


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/


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

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/


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

0

我想做这样的事情,这就是我所做的

附言:我知道最上面有正确的答案,但只想在这里添加自己的内容

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

太多的努力。是不是
ahmednawazbutt

0

如果您选择的值小于10,则无需为此创建新函数。只需将变量分配到方括号中,然后使用三元运算符返回即可。

(m = new Date().getMonth() + 1) < 10 ? `0${m}` : `${m}`

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);
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.