JavaScript添加前导零为止

我已经创build了这个脚本来计算提前10天的date,格式为dd / mm / yyyy:

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

我需要通过将这些规则添加到脚本中,使date在date和月份组件上以前导零显示。 我似乎无法得到它的工作。

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

 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)给出了string的最后两个字符。

所以无论如何,我们可以在一天或一个月中加上"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" 

以下是Mozilla开发者networking上使用自定义“pad”函数的Date对象文档的示例,不必扩展Javascript的Number原型。 他们给出的方便的function就是一个例子

 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 

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

 function str_pad(n) { return String("00" + n).slice(-2); } 
 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(); 

您可以使用三元运算符来格式化date,如“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或Date,否则返回大于10的date(因为我们不需要添加前导0)。 同一个月。

编辑:忘记getMonth从0开始,所以添加了+1来解决它。 当然你也可以直接说d.getMonth()<9:,但是我用+1来帮助理解。

 function formatDate(jsDate){ // add leading zeroes to jsDate when days or months are < 10.. // ie // 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(); } 

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

使您的生活更轻松,并使用Moment.js一些示例代码:

 var beginDateTime = moment() .format('DD-MM-YYYY HH:mm') .toString(); // Now will print 30-06-2015 17:55 console.log(beginDateTime); 

下面的目标是提取configuration,钩入Date.protoype并应用configuration。

我用一个Array来存储时间块,当我push() this作为一个Date对象时,它会返回给我的迭代长度。 当我完成后,我可以使用return值的连接。

这似乎工作得很快:0.016ms

 // 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/

我会做什么,是创build我自己的自定义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)); 

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

 myDateString = myDate.getDate().toLocaleString('en-US', {minimumIntegerDigits: 2}) + '/' + (myDate.getMonth()+1).toLocaleString('en-US', {minimumIntegerDigits: 2}) + '/' + myDate.getFullYear(); // '12/06/2017' 

另一种是用正则expression式来操纵string:

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

但是请注意,一开始会显示一年,最后会显示一天。

我find了这样做的简单方法:

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

将为所有孤独的单个数字添加前导零

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

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

如果要按语言本地化date的输出并需要前导零,则解决scheme看起来有所不同:

 var date = new Date(2018, 2, 1); var result = date.toLocaleDateString("de-DE", { year: "numeric", month: "2-digit", day: "2-digit", }); console.log(result);