我已经创建了这个脚本,以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;

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


试试这个: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"

Number.prototype.padZero= function(len){
 var s= String(this), c= '0';
 len= len || 2;
 while(s.length < len) s= c + s;
 return s;
}

/ /使用:

(function(){
 var myDate= new Date(), myDateString;
 myDate.setDate(myDate.getDate()+10);

 myDateString= [myDate.getDate().padZero(),
 (myDate.getMonth()+1).padZero(),
 myDate.getFullYear()].join('/');

 alert(myDateString);
})()

/*  value: (String)
09/09/2010
*/

var MyDate = new Date();
var MyDateString = '';
MyDate.setDate(MyDate.getDate());
var tempoMonth = (MyDate.getMonth()+1);
var tempoDate = (MyDate.getDate());
if (tempoMonth < 10) tempoMonth = '0' + tempoMonth;
if (tempoDate < 10) tempoDate = '0' + tempoDate;
MyDateString = tempoDate + '/' + tempoMonth + '/' + MyDate.getFullYear();

下面是一个来自Mozilla Developer Network的Date对象文档的例子,它使用了一个自定义的“pad”函数,而不需要扩展Javascript的Number原型。他们给出的一个方便的例子是

function pad(n){return n<10 ? '0'+n : n}

下面是它在上下文中的用法。

/* use a function for the exact format desired... */
function ISODateString(d){
    function pad(n){return n<10 ? '0'+n : n}
    return d.getUTCFullYear()+'-'
    + pad(d.getUTCMonth()+1)+'-'
    + pad(d.getUTCDate())+'T'
    + pad(d.getUTCHours())+':'
    + pad(d.getUTCMinutes())+':'
    + pad(d.getUTCSeconds())+'Z'
}

var d = new Date();
console.log(ISODateString(d)); // prints something like 2009-09-28T19:03:12Z

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

下面的目的是提取配置,挂钩到日期。原型和应用配置。

我已经使用了一个数组来存储时间块,当我将()它作为一个Date对象时,它返回我要迭代的长度。完成后,我可以对返回值使用join。

这似乎工作得相当快:0.016毫秒

// Date protoype
Date.prototype.formatTime = function (options) {
    var i = 0,
        time = [],
        len = time.push(this.getHours(), this.getMinutes(), this.getSeconds());

    for (; i < len; i += 1) {
        var tick = time[i];
        time[i] = tick < 10 ? options.pad + tick : tick;
    }

    return time.join(options.separator);
};

// Setup output
var cfg = {
    fieldClock: "#fieldClock",
    options: {
        pad: "0",
        separator: ":",
        tick: 1000
    }
};

// Define functionality
function startTime() {
    var clock = $(cfg.fieldClock),
        now = new Date().formatTime(cfg.options);

    clock.val(now);
    setTimeout(startTime, cfg.options.tick);
}

// Run once
startTime();

演示:http://jsfiddle.net/tive/U4MZ3/


您可以使用三元运算符将日期格式化为“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();

So

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

将类似于if语句,其中如果getDate()返回的值小于10,则返回'0' +日期,如果大于10则返回日期(因为我们不需要加上前导0)。月份也是如此。

编辑: 忘记了getMonth以0开头,所以添加了+1来解释它。当然,您也可以只说d.g getmonth() < 9:,但我认为使用+1将有助于更容易理解。


我将这个问题的正确答案包装在一个函数中,该函数可以添加多个前导零,但默认为添加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));
}

对于只处理数字且不超过2位数的情况,这也是一种方法:

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

你可以定义一个"str_pad"函数(在php中):

function str_pad(n) {
    return String("00" + n).slice(-2);
}

我要做的是,创建我自己的自定义Date助手,看起来像这样:

var DateHelper = { addDays : function(aDate, numberOfDays) { aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays return aDate; // Return the date }, format : function format(date) { return [ ("0" + date.getDate()).slice(-2), // Get day and pad it with zeroes ("0" + (date.getMonth()+1)).slice(-2), // Get month and pad it with zeroes date.getFullYear() // Get full year ].join('/'); // Glue the pieces together } } // With this helper, you can now just use one line of readable code to : // --------------------------------------------------------------------- // 1. Get the current date // 2. Add 20 days // 3. Format it // 4. Output it // --------------------------------------------------------------------- document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));

(也可以参看这把小提琴)


另一种选择,使用内置函数来填充(但会导致相当长的代码!):

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'

但是要注意的是,在开头显示年份,在结尾显示日期。


我找到了一个最短的方法:

 MyDateString.replace(/(^|\D)(\d)(?!\d)/g, '$10$2');

会给所有孤独的个位数加前导零吗


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

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

现代的方式

新的现代方法是使用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,它允许你本地化和格式化日期的时间。


献给未来的人们(ECMAScript 2017及以后版本)

解决方案

"use strict"

const today = new Date()

const year = today.getFullYear()

const month = `${today.getMonth() + 1}`.padStart(2, "0")

const day = `${today.getDate()}`.padStart(2, "0")

const stringDate = [day, month, year].join("/") // 13/12/2017

解释

String.prototype。padStart(targetLength[, padString])在String中添加尽可能多的padString。这样目标的新长度就是targetLength。

例子

"use strict"

let month = "9"

month = month.padStart(2, "0") // "09"

let byte = "00000100"

byte = byte.padStart(8, "0") // "00000100"

正如@John Henckel所建议的,开始使用toISOString()方法会让事情变得更简单

const dateString = new Date().toISOString().split('-'); const year = [0]; const month = [1]; const day = dateString[2].split('T')[0]; console.log(“${一},{月}-{天}’美元);


您可以提供选项作为参数来格式化日期。第一个参数用于区域设置(您可能不需要),第二个参数用于选项。 欲了解更多信息,请访问 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

var date = new Date(Date.UTC(2012, 1, 1, 3, 0, 0));
var options = { year: 'numeric', month: '2-digit', day: '2-digit' };
console.log(date.toLocaleDateString(undefined,options));

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

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

 let date = new Date();
 let dd = date.getDate();//day of month

 let mm = date.getMonth();// month
 let yyyy = date.getFullYear();//day of week
 if (dd < 10) {//if less then 10 add a leading zero
     dd = "0" + dd;
   }
 if (mm < 10) {
    mm = "0" + mm;//if less then 10 add a leading zero
  }

还有另一种方法可以解决这个问题,在JavaScript中使用slice。

var d = new Date();
var datestring = d.getFullYear() + "-" + ("0"+(d.getMonth()+1)).slice(-2) +"-"+("0" + d.getDate()).slice(-2);

datestring返回日期,格式为您期望的:2019-09-01

另一种方法是使用dateformat库:https://github.com/felixge/node-dateformat


尝试使用这个基本函数,不需要库

Date.prototype.CustomformatDate = function() {
 var tmp = new Date(this.valueOf());
 var mm = tmp.getMonth() + 1;
 if (mm < 10) mm = "0" + mm;
 var dd = tmp.getDate();
 if (dd < 10) dd = "0" + dd;
 return mm + "/" + dd + "/" + tmp.getFullYear();
};

这里有一个非常简单的例子,你可以如何处理这种情况。

var mydate = new Date(); var month = (mydate.getMonth(). tostring()。长度< 2 ?“0”+ mydate.getMonth () .toString (): mydate.getMonth ()); var date = (mydate.getDate(). tostring()。长度< 2 ?“0”+ mydate.getDate () .toString (): mydate.getDate ()); var year = mydate.getFullYear(); console.log(“格式Y-m-d:”+“-”+月+“-”+日期); Y / m / d: console.log(“格式”,年+ " +月+ " +日期);


function pad(value) {
    return value.tostring().padstart(2, 0);
}

let d = new date();
console.log(d);
console.log(`${d.getfullyear()}-${pad(d.getmonth() + 1)}-${pad(d.getdate())}t${pad(d.gethours())}:${pad(d.getminutes())}:${pad(d.getseconds())}`);

你可以使用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

你可以简单地使用:

const d = new Date();
const day = `0${d.getDate()}`.slice(-2);

所以可以这样创建一个函数:

AddZero(val){
    // adding 0 if the value is a single digit
    return `0${val}`.slice(-2);
}

你的新代码:

var MyDate = new Date();
var MyDateString = new Date();

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

一个简单的dateformat库拯救了我的生命(GitHub):

Node.js: var dateFormat = require(" dateFormat "); ES6: import dateFormat from dateFormat;

const now = new Date();             // consider 3rd of December 1993

const full = dateFormat(today, "yyyy-mm-dd");  // 1993-12-03
const day = dateFormat(today, "dd");           // 03
const month = dateFormat(today, "mm");         // 12
const year = dateFormat(today, "yyyy");        // 1993

值得一提的是,它支持广泛的掩模选项。


toISOString可以得到前导0

const currentdate = new Date(); const date = new date (date. utc (currentdate.getFullYear(), (currentdate.getMonth()),currentdate.getDate(), currentdate.getHours(), currentdate.getMinutes(), currentdate.getSeconds())); //你可以传递YY, MM, DD //op: 2018-03-01 //i have passed YY, MM, DD, HH, Min, Sec // op: 2021-06-09T12:14:27.000Z console.log (date.toISOString ());

输出将类似于此:2021-06-09T12:14:27.000Z


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

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(“${月}/{天}/{一}’美元);


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

现在你也可以使用String.prototype.padStart来快速简单地达到目标

String(new Date().getMonth() + 1).padStart(2, '0')

可用性可以在caniuse进行评估

var date = new Date()

var year = date.getFullYear()
var month = String(date.getMonth() + 1).padStart(2, '0')
var day = String(date.getDate()).padStart(2, '0')

console.log('%s/%s/%s', month, day, year)

检查

var date = new date ('7/4/2021') var year = date.getFullYear() var month = String(date.getMonth() + 1).padStart(2, '0') var day = String(date.getDate())。padStart (2, ' 0 ') /** *预期产出:2021年4月7日 * / Console.log ('%s/%s/%s',月,日,年)

旧浏览器的填充

String.prototype.padStart || Object.defineProperty(String.prototype, 'padStart', {
    configurable : true,
    writable : true,
    value : function (targetLength, padString) {
        'use strict'
        /**
         * String.prototype.padStart polyfill
         * https://stackoverflow.com/questions/3605214/javascript-add-leading-zeroes-to-date
         */
        targetLength = targetLength | 0
        padString = arguments.length > 1 ? String(padString) : ' '

        if (this.length < targetLength && padString.length) {
            targetLength = targetLength - this.length

            while (padString.length < targetLength) {
                padString += padString
            }

            return padString.slice(0, targetLength) + this
        } else {
            return this
        }
    }
})