从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-DD
string。
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小提琴
我不喜欢修改本地对象,我认为乘法比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);