从JSdate对象获取YYYYMMDD格式的string?

我试图用JS来把date object转换成YYYYMMDD格式的string。 有比连接Date.getYear()Date.getMonth()Date.getDay()更简单的方法吗?

我经常使用的代码改变了:

 Date.prototype.yyyymmdd = function() { var mm = this.getMonth() + 1; // getMonth() is zero-based var dd = this.getDate(); return [this.getFullYear(), (mm>9 ? '' : '0') + mm, (dd>9 ? '' : '0') + dd ].join(''); }; var date = new Date(); date.yyyymmdd(); 

我不喜欢添加到原型。 另一种select是:

 var rightNow = new Date(); var res = rightNow.toISOString().slice(0,10).replace(/-/g,""); 

你可以使用toISOString函数:

 var today = new Date(); today.toISOString().substring(0, 10); 

它会给你一个“yyyy-mm-dd”的格式。 最好的祝福

Moment.js可能是你的朋友

 var date = new Date(); var formattedDate = moment(date).format('YYYYMMDD'); 

如果你不需要一个纯粹的JS解决scheme,你可以使用jQuery UI来完成这个工作:

 $.datepicker.formatDate('yymmdd', new Date()); 

我通常不喜欢导入太多的库。 但jQuery UI是如此的有用,你可能会在你的项目中的其他地方使用它。

有关更多示例,请访问http://api.jqueryui.com/datepicker/

这是一行代码,可以用来创build今天date的YYYY-MM-DDstring。

 var d = new Date().toISOString().slice(0,10); 

除了oo的回答之外,我想build议从返回中分离逻辑运算,并将它们作为三元variables。

另外,使用concat()来确保variables的安全连接

  Date.prototype.yyyymmdd = function() { var yyyy = this.getFullYear(); var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based var dd = this.getDate() < 10 ? "0" + this.getDate() : this.getDate(); return "".concat(yyyy).concat(mm).concat(dd); }; Date.prototype.yyyymmddhhmm = function() { var yyyy = this.getFullYear(); var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based var dd = this.getDate() < 10 ? "0" + this.getDate() : this.getDate(); var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours(); var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes(); return "".concat(yyyy).concat(mm).concat(dd).concat(hh).concat(min); }; Date.prototype.yyyymmddhhmmss = function() { var yyyy = this.getFullYear(); var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based var dd = this.getDate() < 10 ? "0" + this.getDate() : this.getDate(); var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours(); var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes(); var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds(); return "".concat(yyyy).concat(mm).concat(dd).concat(hh).concat(min).concat(ss); }; var d = new Date(); d.yyyymmdd(); d.yyyymmddhhmm(); d.yyyymmddhhmmss(); 

RiZKiTbuild议多一点DRY小提琴

https://jsfiddle.net/EricHerlitz/tuhhfxz9/

我不喜欢修改本地对象,我认为乘法比string填充接受的解决scheme更清晰。

 function yyyymmdd(dateIn) { var yyyy = dateIn.getFullYear(); var mm = dateIn.getMonth()+1; // getMonth() is zero-based var dd = dateIn.getDate(); return String(10000*yyyy + 100*mm + dd); // Leading zeros for mm and dd } var today = new Date(); console.log(yyyymmdd(today)); 

小提琴: http : //jsfiddle.net/gbdarren/Ew7Y4/

 new Date('Jun 5 2016'). toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}). replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2'); // => '2016-06-05' 

我结束了

 var now = new Date(); var todayUTC = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate())); return todayUTC.toISOString().slice(0, 10).replace(/-/g, ''); 

这是@ weberste对@Pierre Guilbert的回答的回应。

 var someDate = new Date(); var dateFormated = someDate.toISOString().substr(0,10); console.log(dateFormated); 
 // UTC/GMT 0 document.write('UTC/GMT 0: ' + (new Date()).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812013509 // Client local time document.write('<br/>Local time: ' + (new Date(Date.now()-(new Date()).getTimezoneOffset() * 60000)).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812113509 

在这个线程最stream行的答案一点点简化版本https://stackoverflow.com/a/3067896/5437379

 function toYYYYMMDD(d) { var yyyy = d.getFullYear().toString(); var mm = (d.getMonth() + 101).toString().slice(-2); var dd = (d.getDate() + 100).toString().slice(-2); return yyyy + mm + dd; } 

这个人在这里=> http://blog.stevenlevithan.com/archives/date-time-format为Javascript的;Date对象写了一个format()函数,所以它可以使用熟悉的文字格式。

如果您需要在应用程序的Javascript中使用全functiondate格式,请使用它。 否则,如果你想要做的是一个,那么连接getYear(),getMonth(),getDay()可能是最简单的。

这个代码修复了Pierre Guilbert的回答:

(即使在10000年后也可以运作)

 YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"") 

另一种方法是使用toLocaleDateString ,使用具有大端date格式标准的区域设置,例如瑞典,立陶宛,匈牙利,韩国……:

 date.toLocaleDateString('se') 

删除分隔符( - )只是取代非数字的问题:

 console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') ); 

您可以简单地使用这一行代码来获取date

 var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate(); 

看来,mootools提供了Date().format(): http : //mootools.net/docs/more/Native/Date

我不确定是否值得只包括这个特定的任务。

根据@ oo的答案工作,这将根据格式string返回date的string。 你可以很容易地添加一个年份和毫秒的2位数年份正则expression式,如果你需要它们。

 Date.prototype.getFromFormat = function(format) { var yyyy = this.getFullYear().toString(); format = format.replace(/yyyy/g, yyyy) var mm = (this.getMonth()+1).toString(); format = format.replace(/mm/g, (mm[1]?mm:"0"+mm[0])); var dd = this.getDate().toString(); format = format.replace(/dd/g, (dd[1]?dd:"0"+dd[0])); var hh = this.getHours().toString(); format = format.replace(/hh/g, (hh[1]?hh:"0"+hh[0])); var ii = this.getMinutes().toString(); format = format.replace(/ii/g, (ii[1]?ii:"0"+ii[0])); var ss = this.getSeconds().toString(); format = format.replace(/ss/g, (ss[1]?ss:"0"+ss[0])); return format; }; d = new Date(); var date = d.getFromFormat('yyyy-mm-dd hh:ii:ss'); alert(date); 

但是我不知道效率如何,尤其是因为它使用了大量的正则expression式。 它可能可能会使用一些我不掌握纯js的工作。

当我需要这样做时,我通常使用下面的代码。

 var date = new Date($.now()); var dateString = (date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + (date.getDate())).slice(-2)); console.log(dateString); //Will print "2015-09-18" when this comment was written 

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

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

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

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

所以加上.slice(-2)就给了我们最后两个字符:

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

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

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

所以添加.slice(-2)给了我们最后两个字符,或者:

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

如果你不介意添加一个额外的(但是很小的)库, Sugar.js提供了许多用JavaScript处理date的很好的function。 要格式化date,请使用格式化function:

 new Date().format("{yyyy}{MM}{dd}") 

dateformat是一个非常使用的软件包,我发现它比moment.js更健壮,更易于使用。

如何使用:

从NPM下载并安装dateformat 。 要求在你的模块中:

var dateFormat = require('dateformat');

然后只是格式化你的东西:

var myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');

如果使用AngularJs(最多1.5),可以使用datefilter :

 var formattedDate = $filter('date')(myDate, 'yyyyMMdd') 

以下是来自https://stackoverflow.com/users/318563/oo的一些改进;

 Date.prototype.ddmmyyyy = function(delimiter) { var yyyy = this.getFullYear().toString(); var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based var dd = this.getDate().toString(); return (dd[1]?dd:"0"+dd[0]) + delimiter + (mm[1]?mm:"0"+mm[0]) + delimiter +yyyy ; // padding }; 

希望对任何人都有帮助!

🙂

 Try this: 

function showdate(){

 var a = new Date(); var b = a.getFullYear(); var c = a.getMonth(); (++c < 10)? c = "0" + c : c; var d = a.getDate(); (d < 10)? d = "0" + d : d; var final = b + "-" + c + "-" + d; return final; } document.getElementById("todays_date").innerHTML = showdate(); 

这个post帮助我写这个帮手,所以我分享它,以防有人正在寻找这个解决scheme,它支持yyyy,mm,dd的所有变化

 Date.prototype.formattedDate = function (pattern) { formattedDate = pattern.replace('yyyy', this.getFullYear().toString()); var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based mm = mm.length > 1 ? mm : '0' + mm; formattedDate = formattedDate.replace('mm', mm); var dd = this.getDate().toString(); dd = dd.length > 1 ? dd : '0' + dd; formattedDate = formattedDate.replace('dd', dd); return formattedDate; }; d = new Date(); pattern = 'yyyymmdd'; // 20150813 d.formattedDate(pattern); pattern = 'yyyy-mm-dd'; d.formattedDate(pattern); // 2015-08-13 

这是一个更通用的方法,它允许date时间组件,并且可以同时sorting为数字或string。

根据dateISO格式的编号顺序,转换为本地时区并删除非数字。 即:

 // monkey patch version Date.prototype.IsoNum = function (n) { var tzoffset = this.getTimezoneOffset() * 60000; //offset in milliseconds var localISOTime = (new Date(this - tzoffset)).toISOString().slice(0,-1); return localISOTime.replace(/[-T:\.Z]/g, '').substring(0,n || 20); // YYYYMMDD } 

用法

 var d = new Date(); // Tue Jul 28 2015 15:02:53 GMT+0200 (W. Europe Daylight Time) console.log(d.IsoNum(8)); // "20150728" console.log(d.IsoNum(12)); // "201507281502" console.log(d.IsoNum()); // "20150728150253272" 

Date.js有很多有用的dateparsing方法。

require("datejs")

(new Date()).toString("yyyyMMdd")

我尝试编写一个操作JavaScriptdate对象的简单库。 你可以试试这个

 var dateString = timeSolver.getString(date, "YYYYMMDD") 

Libarary在这里: https : //github.com/sean1093/timeSolver

很好,很容易:

  var date = new Date(); var yyyy = date.getFullYear(); var mm = date.getMonth() + 1; // getMonth() is zero-based if (mm < 10) mm='0'+mm; var dd = date.getDate(); if (dd < 10) dd='0'+dd; /*date.yyyymmdd();*/ console.log('test - '+yyyy+'-'+mm+'-'+dd);