我正在尝试使用 JS 将 a转换为格式date object
的字符串。YYYYMMDD
有比连接Date.getYear()
,Date.getMonth()
和更简单的方法Date.getDay()
吗?
50 回答
我经常使用的修改后的代码:
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();
我不喜欢添加到原型中。另一种选择是:
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;
您可以使用以下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');
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'
YYYY-MM-DD
这是可用于创建今天日期字符串的单行代码。
var d = new Date().toISOString().slice(0,10);
如果你不需要纯 JS 解决方案,你可以使用 jQuery UI 来完成这样的工作:
$.datepicker.formatDate('yymmdd', new Date());
我通常不喜欢导入太多的库。但是 jQuery UI 非常有用,您可能会在项目的其他地方使用它。
我不喜欢修改原生对象,而且我认为乘法比填充接受的解决方案的字符串更清晰。
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/
除了 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>
当地时间:
var date = new Date();
date = date.toJSON().slice(0, 10);
世界标准时间:
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 中,您可以添加空格、点或任何您想要的内容。
纯 JS (ES5) 解决方案,没有任何可能由 Date.toISOString() 以 UTC 打印引起的日期跳转问题:
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 回答的评论的回应。
// 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
另一种方法是使用toLocaleDateString
具有大端日期格式标准的语言环境,例如瑞典、立陶宛、匈牙利、韩国……:
date.toLocaleDateString('se')
删除分隔符 ( -
) 只是替换非数字的问题:
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
这不存在使用 UTC 日期格式可能出现的错误:与本地时区的日期相比,UTC 日期可能会休息一天。
var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);
console.log(dateFormated);
dateformat是一个非常常用的包。
如何使用:
dateformat
从 NPM下载并安装。在您的模块中需要它:
const dateFormat = require('dateformat');
然后只是格式化你的东西:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
您可以简单地使用这一行代码来获取年份日期
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
最短的
.toJSON().slice(0,10).split`-`.join``;
let d = new Date();
let s = d.toJSON().slice(0,10).split`-`.join``;
console.log(s);
这里的这个人 => http://blog.stevenlevithan.com/archives/date-time-formatformat()
为 Javascript 的对象编写了一个函数Date
,因此它可以与熟悉的文字格式一起使用。
如果您需要在应用的 Javascript 中使用全功能的日期格式,请使用它。否则,如果你想做的是一次性的,那么连接 getYear()、getMonth()、getDay() 可能是最简单的。
此线程中最受欢迎的答案的一点简化版本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;
}
使用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('-');
};
根据@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 的工作。
注意:我保留了预定义的类定义,但您可能希望根据最佳实践将其放入函数或自定义类中。
此代码修复了 Pierre Guilbert 的回答:
(即使在 10000 年后仍然有效)
YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"")
为简单性和可读性回答另一个问题。
此外,不鼓励使用新方法编辑现有的预定义类成员:
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);
[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,'')
从 ES6 开始,您可以使用模板字符串使其更短:
var now = new Date();
var todayString = `${now.getFullYear()}-${now.getMonth()}-${now.getDate()}`;
此解决方案不归零。看看其他好的答案,看看如何做到这一点。
似乎 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"
如果使用 AngularJs(最高 1.5),您可以使用日期过滤器:
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));
日期简码来救援!
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
这是一种更通用的方法,它允许日期和时间组件,并且可以作为数字或字符串进行排序。
根据 Date ISO 格式的数字顺序,转换为本地时区并去除非数字。IE:
// 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,'');
当然,您可以为日期字符串表示的每个变体构建一个特定的函数。如果您考虑国际日期格式,您最终会得到几十个名称荒谬且难以区分的特定函数。
没有一个合理的函数可以匹配所有格式,但是有一个合理的函数组合可以做到:
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
。一切都是明确的和声明性的,即您几乎可以阅读正在发生的事情。
这是对来自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:
函数显示日期(){
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();
这篇文章帮助我编写了这个助手,所以我分享它以防有人正在寻找这个解决方案,它支持 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.js 有很多有用的日期解析方法。
require("datejs")
(new Date()).toString("yyyyMMdd")
我尝试编写一个简单的库来操作 JavaScript 日期对象。你可以试试这个。
var dateString = timeSolver.getString(date, "YYYYMMDD")
好,易于:
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);
@oo 解决方案在我的情况下不起作用。我的解决方案如下:
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
};
要以 YYYYMMDD 格式获取本地日期,我使用:
var todayDate = (new Date()).toLocaleString('en-GB').slice(0,10).split("\/").reverse().join("");
您可以创建自己的功能如下
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'));
我希望这个功能会有用
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;
}
}
这里的很多答案都使用了 toisostring 函数。此函数在输出前将时间转换为祖鲁时间,这可能会导致问题。
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))
datestring 函数修复了时区问题,或者更好的是,您可以通过使用 zulu 时间来避免整个问题:
mydate = new Date("2018-05-03Z")
// mydate = new Date(Date.UTC(2018,5,3))
console.log(mydate.toISOString().slice(0,10).replace(/-/g,""))
这是一个紧凑的小函数,它易于阅读并且避免了局部变量,这在 JavaScript 中可能会浪费时间。我不使用原型来更改标准模块,因为它会污染名称空间并可能导致代码无法执行您认为应该执行的操作。
main 函数有一个愚蠢的名字,但它传达了这个想法。
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());
}
var dateDisplay = new Date( 2016-11-09 05:27:00 UTC );
dateDisplay = dateDisplay.toString()
var arr = (dateDisplay.split(' '))
var date_String = arr[0]+','+arr[1]+' '+arr[2]+' '+arr[3]+','+arr[4]
这将显示像 Wed,Nov 09 2016,10:57:00 这样的字符串
<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/
为什么不使用 jQuery?
在您的页面中,只需下载/导入文件:
<script src="dateFormat.min.js"></script>
以及您要格式化日期的位置:
$.format.date(aDate, 'yyyyMMdd');
您在此处有更多详细信息/示例: https ://www.npmjs.com/package/jquery-dateformat