JavaScript将日期前面加0

616

我创建了这个脚本来计算10天后的日期,格式为dd/mm/yyyy:

var MyDate = new Date();
var MyDateString = new Date();
MyDate.setDate(MyDate.getDate()+10);
MyDateString = MyDate.getDate() + '/' + (MyDate.getMonth()+1) + '/' + MyDate.getFullYear();

我需要在日期的日和月组成部分上添加前导零,通过将这些规则添加到脚本中来实现。但我似乎无法让它起作用。

if (MyDate.getMonth < 10)getMonth = '0' + getMonth;

if (MyDate.getDate <10)get.Date = '0' + getDate;

如果有人能告诉我在脚本中应该插入这些内容的位置,我会非常感激。


7
作为一种良好的惯例,您应该将变量名的第一个字符设置为小写,并将驼峰命名保留给对象/原型。 - zykadelic
如果YYYY-MM-DD格式可接受,这将是一个非常好的答案:https://dev59.com/UXA75IYBdhLWcg3w3NBe#28431880 - Fabien Snauwaert
2
向下滚动以查看ES6+ padStart答案 - technogeek1995
33个回答

6
你可以使用三元运算符来格式化日期,就像使用 "if" 语句一样。例如:
var MyDate = new Date();
MyDate.setDate(MyDate.getDate()+10);
var MyDateString = (MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate()) + '/' + ((d.getMonth()+1) < 10 ? '0' + (d.getMonth()+1) : (d.getMonth()+1)) + '/' + MyDate.getFullYear();

所以
(MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate())

这段代码类似于if语句,当getDate()返回一个小于10的值时,返回一个'0'加上日期,否则返回日期本身(因为我们不需要添加前导0),月份也是同样的逻辑。

编辑: 忘记了getMonth从0开始计数,所以加了+1来修正。当然你也可以直接写d.getMonth() < 9:,但我觉得加上+1能够更容易理解。


4
function formatDate(jsDate){
  // add leading zeroes to jsDate when days or months are < 10.. 
  // i.e.
  //     formatDate(new Date("1/3/2013")); 
  // returns
  //    "01/03/2103"
  ////////////////////
  return (jsDate.getDate()<10?("0"+jsDate.getDate()):jsDate.getDate()) + "/" + 
      ((jsDate.getMonth()+1)<10?("0"+(jsDate.getMonth()+1)):(jsDate.getMonth()+1)) + "/" + 
      jsDate.getFullYear();
}

4

3
在@modiX的回答基础上,以下是可行的方法......不要留空。"最初的回答"
today.toLocaleDateString("default", {year: "numeric", month: "2-digit", day: "2-digit"})

3

我将这个问题的正确答案封装在一个函数中,该函数可以添加多个前导零,但默认情况下添加1个零。

function zeroFill(nr, depth){
  depth = (depth === undefined)? 1 : depth;

  var zero = "0";
  for (var i = 0; i < depth; ++i) {
    zero += "0";
  }

  return (zero + nr).slice(-(depth + 1));
}

如果仅涉及数字且不超过两位数,这也是一种方法:

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

2
另一种选择是使用内置函数进行填充(但会导致代码相当冗长!):
myDateString = myDate.getDate().toLocaleString('en-US', {minimumIntegerDigits: 2})
  + '/' + (myDate.getMonth()+1).toLocaleString('en-US', {minimumIntegerDigits: 2})
  + '/' + myDate.getFullYear();

// '12/06/2017'

还有一种方法,使用正则表达式操作字符串:

var myDateString = myDate.toISOString().replace(/T.*/, '').replace(/-/g, '/');

// '2017/06/12'

请注意,日期格式将以年份开头,以日份结尾。


我最喜欢的是:myDate.getDate().toLocaleString('en-US', {minimumIntegerDigits: 2}) - Max Alexander Hanna

2

我认为这种解决方案更容易,可以轻松记住:

var MyDate = new Date();


var day = MyDate.getDate() + 10; // 10 days in advance
var month = MyDate.getMonth() + 1; // since months start from 0 we should add 1 to it
var year = MyDate.getFullYear();

day = checkDate(day);
month = checkDate(month);


function checkDate(i){
    if(i < 10){
    i = '0' + i;
  }
  return i;
}

console.log(`${month}/${day}/${year}`);


2

这里有一个非常简单的例子,展示了如何处理这种情况。

var mydate = new Date();

var month = (mydate.getMonth().toString().length < 2 ? "0"+mydate.getMonth().toString() :mydate.getMonth());

var date = (mydate.getDate().toString().length < 2 ? "0"+mydate.getDate().toString() :mydate.getDate());

var year = mydate.getFullYear();

console.log("Format Y-m-d : ",year+"-"+month+"-" + date);

console.log("Format Y/m/d : ",year+"/"+month+"/" + date);


你忘记了月份加1。 - Baccata

1
const month = date.toLocaleDateString('en-US', { month: '2-digit' });
const day = date.toLocaleDateString('en-US', { day: '2-digit' });
const year = date.getFullYear();
const dateString = `${month}-${day}-${year}`;

1
你可以使用 String.slice() 方法来提取字符串的一部分并返回一个新的字符串,而不会修改原始字符串:
const currentDate = new Date().toISOString().slice(0, 10) // 2020-04-16

或者您也可以使用像Moment.js这样的库来格式化日期:

const moment = require("moment")
const currentDate = moment().format("YYYY-MM-DD") // 2020-04-16

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接