我已经创建了这个脚本,以dd/mm/yyyy的格式提前计算10天的日期:

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;

and

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

如果有人能告诉我在哪里插入这些脚本,我会非常感激。


当前回答

加上@modiX的答案,这是什么工作…不要让它空着

today.toLocaleDateString("default", {year: "numeric", month: "2-digit", day: "2-digit"})

其他回答

我认为这个解决方案更简单,也更容易记住:

var MyDate = new Date(); var day = MyDate.getDate() + 10;//提前10天 var month = MyDate.getMonth() + 1;//由于月份从0开始,我们应该给它加1 var year = MyDate.getFullYear(); day = checkDate(天); 月= checkDate(月); 函数checkDate(我){ 如果(i < 10){ I = '0' + I; } 返回我; } console.log(“${月}/{天}/{一}’美元);

现代的方式

新的现代方法是使用toLocaleDateString,因为它不仅允许您使用适当的本地化格式化日期,而且甚至可以传递格式选项以实现所需的结果:

const date = new date (2018,2,1) Const result = date。toLocaleDateString("en-GB",{//你可以使用undefined作为第一个参数 :“数值”, 月:“便是”, 天:“便是”, }) Console.log (result) //输出" 01/03/2018 "

或者使用一个时态对象(仍在提案中,caniuse):

const date = new Temporal.PlainDate(2018, 3, 1) // also works with zoned date
const result = date.toLocaleString("en-GB", { // you can use undefined as first argument
  year: "numeric",
  month: "2-digit",
  day: "2-digit",
})
console.log(result) // outputs “01/03/2018”

当您使用undefined作为第一个参数时,它将检测浏览器语言。或者,你也可以在年份选项上使用2位数。

性能

如果您计划格式化大量的日期,您应该考虑使用Intl。DateTimeFormat相反:

const formatter = new Intl。DateTimeFormat("en-GB",{// <-重用我 :“数值”, 月:“便是”, 天:“便是”, }) const date = new date(2018,2,1) //也可以是一个时态对象 Const result = formatter.format(date) Console.log (result) //输出" 01/03/2018 "

格式化程序与Date和Temporal对象兼容。

历史上的日期

不像在Temporal构造函数中,0到99之间的年份将在Date构造函数中被解释为20世纪的年份。为了防止这种情况,初始化日期如下:

const date = new Date()
date.setFullYear(18, 2, 1) // the year is A.D. 18

这对于Temporal对象来说不是必需的,但是1000年以下的年份在所有情况下都不包含前导零,因为格式化器(为Date and Temporal API共享)根本不支持4位格式。在这种情况下,你必须手动格式化(见下文)。

适用于ISO 8601格式

如果你想以YYYY-MM-DD格式(ISO 8601)获取日期,解决方案看起来不同:

const date = new date(日期。Utc (2018, 2, 1)) [0] . const result = date.toISOString().split('T' Console.log (result) //输出" 2018-03-01 "

您的输入日期应该是UTC格式,否则toISOString()将为您修复该格式。这是通过使用Date来完成的。如上所示。

ISO 8601格式的历史日期

不像在Temporal构造函数中,0到99之间的年份将在Date构造函数中被解释为20世纪的年份。为了防止这种情况,将日期初始化为ISO 8601格式:

const date = new Date()
date.setUTCFullYear(18, 2, 1) // the year is A.D. 18

请注意,日期在1000年之前或9999年之后的Temporal对象的ISO格式与遗留的Date API相比具有不同的格式。建议退回到自定义格式,以在所有情况下强制执行4位数年。

自定义年份的4位格式

遗憾的是,格式化程序不支持年份的前导零。没有4位数字选项。这对于Temporal对象也将保持不变,因为它们确实共享相同的格式化程序。

幸运的是,Date API的ISO格式总是在年份中显示至少4位数字,尽管Temporal对象不会。因此,至少对于Date API,你可以通过使用ISO 8601格式方法的部分手动格式化方法来格式化1000年之前的历史日期:

const date = new date () 日期。setUTCFullYear(18,2,1) const ymd = date.toISOString () .split (T) [0] .split(“-”) Const result = ' ${ymd[2]}/${ymd[1]}/${ymd[0]} ' Console.log (result) //输出" 01/03/0018 "

对于一个Temporal对象,一个不同的路由是必要的,因为ISOYearString在1000年之前和9999年之后的格式是不同的,就像前面提到的:

const date = new Temporal.PlainDate(2018, 3, 1) // also works with zoned date
const zeroPad = (n, digits) => n.toString().padStart(digits, '0');
const result = `${zeroPad(date.day, 2)}/${zeroPad(date.month, 2)}/${zeroPad(date.year, 4)}`;
console.log(result) // outputs “01/03/0018”

杂项

对于日期和时间API,还有toLocaleTimeString,它允许你本地化和格式化日期的时间。

添加一些填充以允许前导零(在需要的地方),并使用所选的分隔符作为字符串进行连接。

Number.prototype.padLeft = function(base,chr){
        var  len = (String(base || 10).length - String(this).length)+1;
        return len > 0? new Array(len).join(chr || '0')+this : this;
    }

var d = new Date(my_date);
var dformatted = [(d.getMonth()+1).padLeft(), d.getDate().padLeft(), d.getFullYear()].join('/');
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}`;

试试这个:http://jsfiddle.net/xA5B7/

var MyDate = new Date();
var MyDateString;

MyDate.setDate(MyDate.getDate() + 20);

MyDateString = ('0' + MyDate.getDate()).slice(-2) + '/'
             + ('0' + (MyDate.getMonth()+1)).slice(-2) + '/'
             + MyDate.getFullYear();

编辑:

为了解释,.slice(-2)给出了字符串的最后两个字符。

所以无论如何,我们都可以在日期或月份后加上“0”,只要求最后两个,因为这两个总是我们想要的。

所以如果MyDate.getMonth()返回9,它将是:

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

加上。slice(-2)就得到了最后两个字符:

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

但如果MyDate.getMonth()返回10,它将是:

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

所以加上.slice(-2)会得到最后两个字符,或者:

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