我正在尝试使用JS将date object
转换为YYYYMMDD
格式的字符串。有没有比连接Date.getYear()
,Date.getMonth()
和Date.getDay()
更简单的方法?
答案 0 :(得分:568)
我经常使用的一段代码:
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();
答案 1 :(得分:281)
我不喜欢添加原型。另一种选择是:
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;
答案 2 :(得分:155)
您可以使用toISOString函数:
var today = new Date();
today.toISOString().substring(0, 10);
它会给你一个&#34; yyyy-mm-dd&#34;格式。
答案 3 :(得分:114)
var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
答案 4 :(得分:35)
如果您不需要纯JS解决方案,可以使用jQuery UI来完成这样的工作:
$.datepicker.formatDate('yymmdd', new Date());
我通常不喜欢导入太多的库。但是jQuery UI非常有用,你可能会在项目的其他地方使用它。
答案 5 :(得分:32)
这是一行代码,您可以使用它来创建今天日期的YYYY-MM-DD
字符串。
var d = new Date().toISOString().slice(0,10);
答案 6 :(得分:23)
除了o-o的答案之外,我还建议将逻辑操作与返回分开,并将它们作为三元组放在变量中。
另外,使用composer self-update
确保变量的安全连接
concat()
RiZKiT建议的更多干小提琴
答案 7 :(得分:18)
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'
答案 8 :(得分:16)
我不喜欢修改本机对象,我认为乘法比填充接受解决方案的字符串更清晰。
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));
答案 9 :(得分:13)
普通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回答的评论。
答案 10 :(得分:12)
当地时间:
var date = new Date();
date = date.toJSON().slice(0, 10);
UTC时间:
var date = new Date().toISOString();
date = date.substring(0, 10);
日期将在我撰写本文时今天打印2020-06-15。
toISOString()方法返回ISO标准为YYYY-MM-DDTHH:mm:ss.sssZ
该代码采用了YYYY-MM-DD格式所需的前10个字符。
如果要不带'-'的格式,请使用:
var date = new Date();
date = date.toJSON().slice(0, 10).split`-`.join``;
在.join``中,您可以添加空格,点或任何您想要的内容。
答案 11 :(得分:10)
// 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
&#13;
答案 12 :(得分:8)
var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);
console.log(dateFormated);
答案 13 :(得分:6)
您只需使用此一行代码即可获得年度日期
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
答案 14 :(得分:6)
另一种方法是将toLocaleDateString
与具有big-endian date format standard的区域设置一起使用,例如瑞典,立陶宛,匈牙利,韩国,......:
date.toLocaleDateString('se')
删除分隔符(-
)只需更换非数字:
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
&#13;
这没有您可以通过UTC日期格式获得的潜在错误:与当地时区的日期相比,UTC日期可能会休息一天。
答案 15 :(得分:5)
此线程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;
}
答案 16 :(得分:5)
此代码修复了Pierre Guilbert的回答:
(即使在10000年后仍然有效)
YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"")
答案 17 :(得分:4)
这个人在这里=&gt; http://blog.stevenlevithan.com/archives/date-time-format为Javascript的format()
对象编写了Date
函数,因此可以使用熟悉的文字格式。
如果您需要在应用的Javascript中使用完整功能的日期格式,请使用它。否则,如果您想要做的是一次性,那么连接getYear(),getMonth(),getDay()可能是最简单的。
答案 18 :(得分:3)
[day,,month,,year]= Intl.DateTimeFormat(undefined, { year: 'numeric', month: '2-digit', day: '2-digit' }).formatToParts(new Date()),year.value+month.value+day.value
或
new Date().toJSON().slice(0,10).replace(/\/|-/g,'')
答案 19 :(得分:3)
答案 20 :(得分:3)
如果使用AngularJs(最多1.5),您可以使用date filter:
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
答案 21 :(得分:3)
似乎mootools提供Date().format()
:https://mootools.net/more/docs/1.6.0/Types/Date
我不确定是否值得为这项特殊任务而包括。
答案 22 :(得分:3)
dateformat是一个非常常用的软件包,我发现它比moment.js更强大,更易于使用。
如何使用:
从NPM下载并安装dateformat
。在你的模块中需要它:
var dateFormat = require('dateformat');
然后只是格式化你的东西:
var myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
答案 23 :(得分:3)
当我需要这样做时,我通常会使用下面的代码。
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)给出了字符串的最后两个字符。
所以无论如何,我们都可以添加&#34; 0&#34;到了白天或月,只要求最后两个,因为那些总是我们想要的两个。
因此,如果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"
答案 24 :(得分:3)
根据@ o-o的回答,这将根据格式字符串返回日期的字符串。您可以轻松地为年份添加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的作品。
答案 25 :(得分:2)
.toJSON().slice(0,10).split`-`.join``;
let d = new Date();
let s = d.toJSON().slice(0,10).split`-`.join``;
console.log(s);
答案 26 :(得分:2)
如果你不介意包含一个额外的(但很小的)库,Sugar.js提供了很多很好的功能,可以在JavaScript中使用dates。 要格式化日期,请使用format功能:
new Date().format("{yyyy}{MM}{dd}")
答案 27 :(得分:2)
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
答案 28 :(得分:2)
为Simplicity&amp;而回答另一个人可读性。
此外,不鼓励使用新方法编辑现有的预定义类成员:
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);
答案 29 :(得分:1)
从ES6开始,您可以使用模板字符串使其更短一些:
var now = new Date();
var todayString = `${now.getFullYear()}-${now.getMonth()}-${now.getDate()}`;
此解决方案不会将填充置零。寻找其他好的答案,看看如何做到这一点。
答案 30 :(得分:1)
使用 padStart :
Date.prototype.yyyymmdd = function() {
return [
this.getFullYear(),
(this.getMonth()+1).toString().padStart(2, '0'), // getMonth() is zero-based
this.getDate().toString().padStart(2, '0')
].join('-');
};
答案 31 :(得分:1)
这是一种更通用的方法,它允许 date 和 time 组件,并且可以作为数字或字符串进行相同的排序。
根据Date 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"
答案 32 :(得分:1)
原生Javascript:
new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');
答案 33 :(得分:1)
yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));
&#13;
答案 34 :(得分:0)
当然,您可以为日期字符串表示形式的每个变体构建一个特定的函数。如果您考虑使用国际日期格式,那么您会发现许多带有冗长名称且难以区分的特定功能。
没有可以匹配所有格式的合理函数,但是有一个合理的函数组合可以做到:
const pipe2 = f => g => x =>
g(f(x));
const pipe3 = f => g => h => x =>
h(g(f(x)));
const invoke = (method, ...args) => o =>
o[method] (...args);
const padl = (c, n) => s =>
c.repeat(n)
.concat(s)
.slice(-n);
const inc = n => n + 1;
// generic format date function
const formatDate = stor => (...args) => date =>
args.map(f => f(date))
.join(stor);
// MAIN
const toYYYYMMDD = formatDate("") (
invoke("getFullYear"),
pipe3(invoke("getMonth")) (inc) (padl("0", 2)),
pipe2(invoke("getDate")) (padl("0", 2)));
console.log(toYYYYMMDD(new Date()));
是的,这是很多代码。但是,您可以通过简单地更改传递给高阶函数formatDate
的函数参数来表示每个字符串日期表示形式。一切都是明确的和声明性的,即,您几乎可以阅读正在发生的事情。
答案 35 :(得分:0)
我希望此功能有用
function formatDate(dDate,sMode){
var today = dDate;
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(dd<10) {
dd = '0'+dd
}
if(mm<10) {
mm = '0'+mm
}
if (sMode+""==""){
sMode = "dd/mm/yyyy";
}
if (sMode == "yyyy-mm-dd"){
return yyyy + "-" + mm + "-" + dd + "";
}
if (sMode == "dd/mm/yyyy"){
return dd + "/" + mm + "/" + yyyy;
}
}
答案 36 :(得分:0)
您可以如下创建自己的功能
function toString(o, regex) {
try {
if (!o) return '';
if (typeof o.getMonth === 'function' && !!regex) {
let splitChar = regex.indexOf('/') > -1 ? '/' : regex.indexOf('-') > -1 ? '-' : regex.indexOf('.') > -1 ? '.' : '';
let dateSeparate = regex.split(splitChar);
let result = '';
for (let item of dateSeparate) {
let val = '';
switch (item) {
case 'd':
val = o.getDate();
break;
case 'dd':
val = this.date2Char(o.getDate());
break;
case 'M':
val = o.getMonth() + 1;
break;
case 'MM':
val = this.date2Char(o.getMonth() + 1);
break;
case 'yyyy':
val = o.getFullYear();
break;
case 'yy':
val = this.date2Char(o.getFullYear());
break;
default:
break;
}
result += val + splitChar;
}
return result.substring(0, result.length - 1);
} else {
return o.toString();
}
} catch(ex) { return ''; }
}
function concatDateToString(args) {
if (!args.length) return '';
let result = '';
for (let i = 1; i < args.length; i++) {
result += args[i] + args[0];
}
return result.substring(0, result.length - 1);
}
function date2Char(d){
return this.rightString('0' + d);
}
function rightString(o) {
return o.substr(o.length - 2);
}
使用过:
var a = new Date();
console.log('dd/MM/yyyy: ' + toString(a, 'dd/MM/yyyy'));
console.log('MM/dd/yyyy: ' + toString(a, 'MM/dd/yyyy'));
console.log('dd/MM/yy: ' + toString(a, 'dd/MM/yy'));
console.log('MM/dd/yy: ' + toString(a, 'MM/dd/yy'));
答案 37 :(得分:0)
这里的很多答案都使用 toisostring 函数。此函数在输出前将时间转换为zulu时间,这可能会导致问题。
function datestring(time) {
return new Date(time.getTime() - time.getTimezoneOffset()*60000).toISOString().slice(0,10).replace(/-/g,"")
}
mydate = new Date("2018-05-03")
console.log(datestring(mydate))
日期字符串函数修复了时区问题,或者更好的是您可以通过在祖鲁时间工作来避免整个问题:
mydate = new Date("2018-05-03Z")
// mydate = new Date(Date.UTC(2018,5,3))
console.log(mydate.toISOString().slice(0,10).replace(/-/g,""))
答案 38 :(得分:0)
要以YYYYMMDD格式获取本地日期,请使用:
var todayDate = (new Date()).toLocaleString('en-GB').slice(0,10).split("\/").reverse().join("");
答案 39 :(得分:0)
@ o-o解决方案在我的情况下不起作用。 我的解决方案如下:
Date.prototype.yyyymmdd = function() {
var mm = this.getMonth() + 1; // getMonth() is zero-based
var dd = this.getDate();
var ret = [this.getFullYear(), (mm<10)?'0':'', mm, (dd<10)?'0':'', dd].join('');
return ret; // padding
};
答案 40 :(得分:0)
很好,很简单:
FIRApp.configure()
答案 41 :(得分:0)
我尝试编写一个简单的库来操作JavaScript日期对象。你可以试试这个。
var dateString = timeSolver.getString(date, "YYYYMMDD")
答案 42 :(得分:0)
Date.js有很多有用的日期解析方法。
require("datejs")
(new Date()).toString("yyyyMMdd")
答案 43 :(得分:0)
这篇文章帮我写了这个帮手,所以我分享一下,以防万一 正在寻找这个解决方案,它支持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
答案 44 :(得分:0)
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();
答案 45 :(得分:0)
以下是对https://stackoverflow.com/users/318563/o-o
的答案的一点改进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
};
希望对任何人都有帮助!
:)
答案 46 :(得分:-1)
<pre>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]));
var ampm = (hh >= 12) ? "PM" : "AM";
format = format.replace(/ampm/g, (ampm[1]?ampm:"0"+ampm[0]));
return format;
};
var time_var = $('#899_TIME');
var myVar = setInterval(myTimer, 1000);
function myTimer() {
var d = new Date();
var date = d.getFromFormat('dd-mm-yyyy hh:ii:ss:ampm');
time_var.text(date);
} </pre>
use the code and get the output like **26-07-2017 12:29:34:PM**
check the below link for your reference
https://parthiban037.wordpress.com/2017/07/26/date-and-time-format-in-oracle-apex-using-javascript/
答案 47 :(得分:-1)
position: fixed
这将显示像2016年11月9日星期三,10:57:00
的字符串答案 48 :(得分:-1)
这是一个简单的小函数,它易于阅读并避免使用局部变量,这些变量可能是JavaScript中的时间接收器。我不使用原型来改变标准模块,因为它污染了命名空间,并且可能导致代码无法按照您的想法进行操作。
主要功能有一个愚蠢的名字,但它可以解决这个问题。
function dateToYYYYMMDDhhmmss(date) {
function pad(num) {
num = num + '';
return num.length < 2 ? '0' + num : num;
}
return date.getFullYear() + '/' +
pad(date.getMonth() + 1) + '/' +
pad(date.getDate()) + ' ' +
pad(date.getHours()) + ':' +
pad(date.getMinutes()) + ':' +
pad(date.getSeconds());
}