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