如何在JavaScript中以MM/dd/yyyy HH:mm:ss的格式格式化日期?

99

可能重复:
在JavaScript中格式化日期

我知道JavaScript Date对象中的其他可能格式,但不知道如何将日期格式化为MM/dd/yyyy HH:mm:ss格式。

如果您遇到这样的问题,请告诉我。


所有的方法都在日期对象上。你尝试过什么? - Corbin
嗨,Corbin,我尝试了一些预定义的格式,但是我没有找到一个针对 MM/dd/yyyy HH:mm:ss 的预定义格式。 - Gendaful
7
日期.toISOString().replace(/([^T]+)T([^.]+).*/g, '$1 $2') 翻译:将日期转为ISO字符串格式后,使用正则表达式匹配,并替换其中的 "T" 为一个空格。 - Bálint Juhász
new Date(Date.now()).toISOString().replace('T', ' ') - tbo47
2022-01-01 00:00:00 - Ragen Dazs
4个回答

169

[附注 12/2022]: 这里有一个,可以使用Intl.DateTimeFormat格式化日期。

尝试像这样做:

var d = new Date,
    dformat = [d.getMonth()+1,
               d.getDate(),
               d.getFullYear()].join('/')+' '+
              [d.getHours(),
               d.getMinutes(),
               d.getSeconds()].join(':');

如果您想在值小于10时保留前导零,请使用此数字扩展。

Number.prototype.padLeft = function(base,chr){
    var  len = (String(base || 10).length - String(this).length)+1;
    return len > 0? new Array(len).join(chr || '0')+this : this;
}
// usage
//=> 3..padLeft() => '03'
//=> 3..padLeft(100,'-') => '--3' 

应用于之前的代码:

var d = new Date,
    dformat = [(d.getMonth()+1).padLeft(),
               d.getDate().padLeft(),
               d.getFullYear()].join('/') +' ' +
              [d.getHours().padLeft(),
               d.getMinutes().padLeft(),
               d.getSeconds().padLeft()].join(':');
//=> dformat => '05/17/2012 10:52:21'

jsfiddle 中查看此代码。

[编辑2019年] 使用 ES20xx,您可以使用模板字面量和新的padStart字符串扩展。

const dt = new Date();
const padL = (nr, len = 2, chr = `0`) => `${nr}`.padStart(2, chr);

console.log(`${
    padL(dt.getMonth()+1)}/${
    padL(dt.getDate())}/${
    dt.getFullYear()} ${
    padL(dt.getHours())}:${
    padL(dt.getMinutes())}:${
    padL(dt.getSeconds())}`
);

另请参阅


1
你的示例不正确。他要求 MM/dd 格式,而你提供了 dd/MM(欧洲风格)格式。 - Jeff Fischer
2
@JeffFischer 是的,这就是为什么我的回答中说“尝试类似于这样的东西”。无论如何,我已经为您特别调整了答案。 - KooiInc
你好,为什么在 getMonth() 后面加了 +1?我尝试去掉它,但是得到的月份不正确。是否发生了某种转换? - Vishal
1
好的,明白了。它给出从0到11的月份。 - Vishal
以上语法对我的日期格式化非常有帮助。 - Narendra Maru
显示剩余2条评论

72
您可以始终通过提取部分并使用字符串函数按所需顺序组合它们来格式化日期:

var date = new Date();
var dateStr =
  ("00" + (date.getMonth() + 1)).slice(-2) + "/" +
  ("00" + date.getDate()).slice(-2) + "/" +
  date.getFullYear() + " " +
  ("00" + date.getHours()).slice(-2) + ":" +
  ("00" + date.getMinutes()).slice(-2) + ":" +
  ("00" + date.getSeconds()).slice(-2);
console.log(dateStr);


3
应该使用getDate()来获取日期。不能编辑,因为Stack Overflow要求编辑内容必须多于6个字符... 唉。 - Llyle

6
var d = new Date();

var curr_date = d.getDate();

var curr_month = d.getMonth();

var curr_year = d.getFullYear();

document.write(curr_date + "-" + curr_month + "-" + curr_year);

使用此功能,您可以格式化日期。
您可以根据自己的需要更改外观。
有关更多信息,请访问此处

-4
var d = new Date();
//调用函数 formatDate(d,4);
function formatDate(dateObj,format) { var monthNames = [ "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" ]; var curr_date = dateObj.getDate(); var curr_month = dateObj.getMonth(); curr_month = curr_month + 1; var curr_year = dateObj.getFullYear(); var curr_min = dateObj.getMinutes(); var curr_hr= dateObj.getHours(); var curr_sc= dateObj.getSeconds(); if(curr_month.toString().length == 1) curr_month = '0' + curr_month; if(curr_date.toString().length == 1) curr_date = '0' + curr_date; if(curr_hr.toString().length == 1) curr_hr = '0' + curr_hr; if(curr_min.toString().length == 1) curr_min = '0' + curr_min;
if(format ==1)//dd-mm-yyyy { return curr_date + "-"+curr_month+ "-"+curr_year; } else if(format ==2)//yyyy-mm-dd { return curr_year + "-"+curr_month+ "-"+curr_date; } else if(format ==3)//dd/mm/yyyy { return curr_date + "/"+curr_month+ "/"+curr_year; } else if(format ==4)// MM/dd/yyyy HH:mm:ss { return curr_month+"/"+curr_date +"/"+curr_year+ " "+curr_hr+":"+curr_min+":"+curr_sc; } }

40
这里的编码真的很糟糕。 - KooiInc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接