我正在尝试使用JS将a date object
转换为YYYYMMDD
格式字符串。难道还有比串联更简单的方法Date.getYear()
,Date.getMonth()
和Date.getDay()
?
我正在尝试使用JS将a date object
转换为YYYYMMDD
格式字符串。难道还有比串联更简单的方法Date.getYear()
,Date.getMonth()
和Date.getDay()
?
Answers:
我经常使用的修改过的代码:
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();
[this.getFullYear(), mm<10 ? '0'+ mm: mm, dd<10 ? '0'+ dd : dd].join('.')
var mm = (this.getMonth() + 101).toString().substring(1, 3)
我不喜欢添加原型。一种替代方法是:
var rightNow = new Date();
var res = rightNow.toISOString().slice(0,10).replace(/-/g,"");
<!-- Next line is for code snippet output only -->
document.body.innerHTML += res;
rightNow
变量,可以将new Date
其包装起来并放在一行中:(new Date()).toISOString().slice(0,10).replace(/-/g,"")
YYYYMMDDHHmmSSsss
,所以我这样做了: var ds = (new Date()).toISOString().replace(/[^0-9]/g, "");
。很简单,但是应该封装。
rightNow.setMinutes(rightNow.getMinutes() - rightNow.getTimezoneOffset()); rightNow.toISOString().slice(0,10)
您可以使用以下toISOString
功能:
var today = new Date();
today.toISOString().substring(0, 10);
它将为您提供“ yyyy-mm-dd”格式。
如果您不需要纯粹的JS解决方案,则可以使用jQuery UI来完成以下工作:
$.datepicker.formatDate('yymmdd', new Date());
我通常不喜欢导入太多库。但是jQuery UI非常有用,您可能会在项目的其他地方使用它。
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'
new Date('Sun Mar 31 2019 00:00:00.000').toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');
除了oo的答案外,我还建议您将逻辑运算与返回值分开,并将它们作为三元数放入变量中。
另外,用于concat()
确保变量的安全串联
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 yyyymmdd = this.yyyymmdd();
var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
return "".concat(yyyymmdd).concat(hh).concat(min);
};
Date.prototype.yyyymmddhhmmss = function() {
var yyyymmddhhmm = this.yyyymmddhhmm();
var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds();
return "".concat(yyyymmddhhmm).concat(ss);
};
var d = new Date();
document.getElementById("a").innerHTML = d.yyyymmdd();
document.getElementById("b").innerHTML = d.yyyymmddhhmm();
document.getElementById("c").innerHTML = d.yyyymmddhhmmss();
<div>
yyyymmdd: <span id="a"></span>
</div>
<div>
yyyymmddhhmm: <span id="b"></span>
</div>
<div>
yyyymmddhhmmss: <span id="c"></span>
</div>
("00" + (this.getDate())).slice(-2)
用来获取两位数为基础的数字。没有“ if”或“?:”语句,并且对.getX()函数的调用更少。如果不是更快一点,它至少更具可读性。
我不喜欢修改本机对象,而且我认为乘法比填充接受的解决方案的字符串更清晰。
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));
.replace('-', '')
对它进行回答才能使其回答OP的问题),而您对OP的原始问题是正确的,并且不需要采取额外的步骤。优秀的!
普通JS(ES5)解决方案,没有因UTC中的Date.toISOString()打印而引起的任何可能的日期跳转问题:
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的回答的评论的回应。
toISOString
返回多个连续的连字符吗?
// 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
var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);
console.log(dateFormated);
new Date()
创建一个新的date对象,该对象只是nr的包装。自1970/01/01 00:00:00.000 UTC以来的毫秒数。然后toISOString
在当地时区打印。
另一种方法是使用toLocaleDateString
具有大尾数日期格式标准的语言环境,例如瑞典,立陶宛,匈牙利,韩国,...:
date.toLocaleDateString('se')
删除定界符(-
)只是替换非数字的问题:
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
这没有使用UTC日期格式会出现的潜在错误:与当地时区的日期相比,UTC日期可能会放假一天。
您只需使用这一行代码即可获取年份中的日期
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
这个线程中最流行的答案的有点简化的版本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;
}
dateformat是一个非常常用的软件包。
如何使用:
dateformat
从NPM 下载并安装。在您的模块中要求它:
const dateFormat = require('dateformat');
然后格式化您的内容:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
这个人=> http://blog.stevenlevithan.com/archives/date-time-formatformat()
为Javascript Date
对象编写了一个函数,因此可以与熟悉的文字格式一起使用。
如果您需要在应用程序的Javascript中使用全功能的日期格式,请使用它。否则,如果您想要做的是一次性的,则将getYear(),getMonth(),getDay()串联起来可能是最简单的。
从@oo的答案开始工作,这将根据格式字符串返回日期字符串。您可以轻松地为年和毫秒添加2位数的年正则表达式,如果需要,可以添加此类。
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);
但是,我不知道这样做的效率如何,尤其是在明智的情况下,因为它使用了大量的正则表达式。它可能会使用一些我不精通纯js的工作。
看来mootools提供了Date().format()
:https : //mootools.net/more/docs/1.6.0/Types/Date
我不确定是否值得仅包括此特定任务。
我通常在需要执行以下操作时使用以下代码。
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)给出了字符串的最后两个字符。
因此,无论如何,我们都可以在日期或月份中添加“ 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"
简单性和可读性回答另一个问题。
另外,不建议使用新方法编辑现有的预定义类成员:
function getDateInYYYYMMDD() {
let currentDate = new Date();
// year
let yyyy = '' + currentDate.getFullYear();
// month
let mm = ('0' + (currentDate.getMonth() + 1)); // prepend 0 // +1 is because Jan is 0
mm = mm.substr(mm.length - 2); // take last 2 chars
// day
let dd = ('0' + currentDate.getDate()); // prepend 0
dd = dd.substr(dd.length - 2); // take last 2 chars
return yyyy + "" + mm + "" + dd;
}
var currentDateYYYYMMDD = getDateInYYYYMMDD();
console.log('currentDateYYYYMMDD: ' + currentDateYYYYMMDD);
yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));
date-shortcode进行救援!
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
这是一种更通用的方法,可以同时使用日期和时间部分,并且可以作为数字或字符串进行相同的排序。
根据日期ISO格式的数字顺序,转换为本地时区并删除非数字。即:
// 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"
本机Javascript:
new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');