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

IT技术 javascript
2021-01-31 04:20:54

当我们对象调用getMonth()andgetDate()date,我们会得到single digit number. 例如 :

对于january,它显示1,但我需要将其显示为01. 怎么做?

6个回答
("0" + this.getDate()).slice(-2)

对于日期,以及类似的:

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

本月。

@Sasha Chedygov 确定您可能每秒计算月份数千次,特别是在您进行排序时
2021-03-14 04:20:54
为什么不使用padStart
2021-03-28 04:20:54
@dak:那什么时候才真正重要?我怀疑您每秒计算月份数以千计。
2021-03-30 04:20:54
slice 很聪明,但它比简单的比较慢得多:jsperf.com/slice-vs-comparison
2021-04-07 04:20:54
很酷,但是:function addZ(n){return n<10? '0'+n:''+n;}有点通用。
2021-04-13 04:20:54

如果你想要像“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', ' ');

我希望这有帮助

时区偏移可以通过以下方式处理: var date = new Date(new Date().getTime() - new Date().getTimezoneOffset()*60*1000).toISOString().substr(0,19) .replace('T', '');
2021-03-14 04:20:54
请注意,此方法将根据 UTC 时区返回日期和时间。
2021-03-26 04:20:54
这是我遇到的最简洁的解决方案。这里唯一的问题是时区偏移。
2021-04-01 04:20:54
祈祷,你的代码对我有用,但复制和粘贴一定有一些隐藏的字符或其他东西,所以我只是手动输入它。
2021-04-01 04:20:54
我最终在这个问题上试图解决这个确切的问题,所以事实证明,你的答案正是我所需要的。
2021-04-07 04:20:54

为什么不使用padStart

padStart(targetLength, padString)这里targetLength2我们填充它用0

// Source: https://stackoverflow.com/a/50769505/2965993

var dt = new Date();

year  = dt.getFullYear();
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
  • getFullYear()返回 4 位年份,不需要padStart.
  • getMonth() 返回从 0 到 11 的月份。
    • 在填充前将 1 添加到月份以保持 1 到 12
  • getDate() 返回从 1 到 31 的日期。
    • 第 7 天将返回07,因此我们不需要在填充字符串之前加 1。
年 = dt.getFullYear()
2021-03-19 04:20:54
对。它包含在上面的 MDN 链接中。如果你使用 babel 进行转译,你应该没有问题。
2021-04-09 04:20:54

月份示例:

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
}
这将返回不一致的结果。对于 11 月和 12 月,它返回一个字符串,而对于其他月份,它返回一个数字。
2021-03-25 04:20:54
请注意,getMonth 返回一个介于 0 和 11 之间的数字,而不是 1 和 12。
2021-04-01 04:20:54
我更新了代码以实现 Salman A 警告,getMonth 是基于零而不是 1。并添加了引号以确保始终返回字符串。
2021-04-10 04:20:54

最好的方法是创建自己的简单格式化程序(如下所示):

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