如何将Date对象格式化为字符串?
当前回答
字符串转换
// date
const dateConvert = {
dasher: dt => {
let m = (dt.getMonth() + 1) === 13 ? 1 : (dt.getMonth() + 1);
m = m < 10 ? `0${m}` : m.toString();
let d = dt.getDate();
d = d < 10 ? `0${d}` : d.toString();
return `${dt.getFullYear()}-${m}-${d}`;
},
slasher: dt => {
return dateConvert.slash(dateConvert.dasher(dt));
},
dash: str => {
// 03/11/2022 -> 2022-03-11
let [d, m, y] = str.split('/');
return `${y}-${m}-${d}`;
},
slash: str => {
// 2022-03-11 -> 03/11/2022
let [y, m, d] = str.split('-');
return `${d}/${m}/${y}`
}
}
// console.log(dateConvert.dasher(new Date('01/31/2001')));
其他回答
也许这有助于那些自愿或意外地一个接一个地寻找多种日期格式的人。请查找代码:我在当前日期(今天是2020年6月29日)使用Moment.js格式函数:var startDate=Moment(new date()).format('MM/DD/YY');结果:20年6月28日
它只保留年份部分:20作为“06/28/20”,之后如果我运行语句new Date(startDate),结果是“Mon Jun 28 1920 00:00:00 GMT+0530(印度标准时间)”。
然后,当我在“06/28/20”上使用另一种格式时:startDate=moment(startDate).format('MM-DD-YYYY');结果:1920年6月28日,在谷歌Chrome和Firefox浏览器中,它给出了第二次尝试的正确日期:2020年6月28-日。
但在Internet Explorer中,它存在问题。由此,我理解我们可以在给定日期应用一种日期格式。如果我们想要第二个日期格式,它应该应用于新的日期,而不是第一个日期格式结果。并观察到,首次应用“MM-DD-YYYY”和下一个“MM-DD-YYYY”在Internet Explorer中工作。为了清楚理解,请在链接中找到我的问题:在Internet Explorer 11中使用Moment.js日期格式时,日期出错。
在现代浏览器(*)中,您可以这样做:
var today = new Date().toLocaleDateString('en-GB', {
day : 'numeric',
month : 'short',
year : 'numeric'
}).split(' ').join('-');
如果今天(1月24日)执行输出ᵗʰ, 2016):
'24-Jan-2016'
(*)根据MDN,“现代浏览器”是指Chrome 24+、Firefox 29+、Internet Explorer 11、Edge 12+、Opera 15+和Safari夜间版本。
简短、广泛兼容的方法:
function formatDate(date) {
date.toISOString()
.replace(/^(\d+)-(\d+)-(\d+).*$/, // Only extract Y-M-D
function (a,y,m,d) {
return [
d, // Day
['Jan','Feb','Mar','Apr','May','Jun', // Month Names
'Jul','Ago','Sep','Oct','Nov','Dec']
[m-1], // Month
y // Year
].join('-') // Stitch together
})
}
或者,作为单行:
date.toISOString().replace(/^(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+).(\d+)Z$/, function (a,y,m,d) {return [d,['Jan','Feb','Mar','Apr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic'][m-1],y].join('-')})
一行中请求的格式-没有库和Date方法,只有正则表达式:
var d = (new Date()).toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3');
// date will be formatted as "14-Oct-2015" (pass any date object in place of 'new Date()')
在我的测试中,这在主要浏览器(Chrome、Safari、Firefox和IE)中可靠地工作。正如@RobG所指出的,Date.protype.toString()的输出依赖于实现,因此对于国际或非浏览器实现,只需测试输出,以确保它在JavaScript引擎中正常工作。您甚至可以添加一些代码来测试字符串输出,并在执行正则表达式替换之前确保其与预期匹配。
这是我实现npm插件的方式
var monthNames = [
"January", "February", "March",
"April", "May", "June", "July",
"August", "September", "October",
"November", "December"
];
var Days = [
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"
];
var formatDate = function(dt,format){
format = format.replace('ss', pad(dt.getSeconds(),2));
format = format.replace('s', dt.getSeconds());
format = format.replace('dd', pad(dt.getDate(),2));
format = format.replace('d', dt.getDate());
format = format.replace('mm', pad(dt.getMinutes(),2));
format = format.replace('m', dt.getMinutes());
format = format.replace('MMMM', monthNames[dt.getMonth()]);
format = format.replace('MMM', monthNames[dt.getMonth()].substring(0,3));
format = format.replace('MM', pad(dt.getMonth()+1,2));
format = format.replace(/M(?![ao])/, dt.getMonth()+1);
format = format.replace('DD', Days[dt.getDay()]);
format = format.replace(/D(?!e)/, Days[dt.getDay()].substring(0,3));
format = format.replace('yyyy', dt.getFullYear());
format = format.replace('YYYY', dt.getFullYear());
format = format.replace('yy', (dt.getFullYear()+"").substring(2));
format = format.replace('YY', (dt.getFullYear()+"").substring(2));
format = format.replace('HH', pad(dt.getHours(),2));
format = format.replace('H', dt.getHours());
return format;
}
pad = function(n, width, z) {
z = z || '0';
n = n + '';
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}
推荐文章
- 给一个数字加上st, nd, rd和th(序数)后缀
- 如何以编程方式触发引导模式?
- setTimeout带引号和不带括号的区别
- 在JS的Chrome CPU配置文件中,'self'和'total'之间的差异
- 用javascript检查输入字符串中是否包含数字
- 如何使用JavaScript分割逗号分隔字符串?
- 在Javascript中~~(“双波浪号”)做什么?
- 谷歌chrome扩展::console.log()从后台页面?
- 未捕获的SyntaxError:
- [].slice的解释。调用javascript?
- jQuery日期/时间选择器
- 我如何预填充一个jQuery Datepicker文本框与今天的日期?
- 数组的indexOf函数和findIndex函数的区别
- jQuery添加必要的输入字段
- Access-Control-Allow-Origin不允许Origin < Origin >