如何将Date对象格式化为字符串?


当前回答

如果您对格式的控制比当前接受的答案稍少,则可以使用Date#toLocaleDateString创建标准的特定于区域设置的渲染。区域设置和选项参数允许应用程序指定应使用其格式约定的语言,并允许对渲染进行一些自定义。

选项关键示例:

日期:当天的表示。可能的值为“数字”、“2位数”。工作日:工作日的表示。可能的值有“窄”、“短”、“长”。年份:年度的表示。可能的值为“数字”、“2位数”。月份:月份的表示。可能的值有“数字”、“2位数”、“窄”、“短”、“长”。小时:小时的表示。可能的值为“数字”、“2位数”。分钟:会议记录的表示。可能的值为“数字”、“2位数”。第二:第二个的表示。可能的值为“数字”和“2位”。

所有这些键都是可选的。您可以根据需要更改选项值的数量,这也将反映每个日期时间项的存在。

注意:如果您只想配置内容选项,但仍然使用当前区域设置,则为第一个参数传递null将导致错误。改用undefined。

对于不同的语言:

“en-US”:用于美式英语“en-GB”:用于英国英语“hi IN”:印地语“ja JP”:日语

您可以使用更多语言选项。

例如

var options={weeday:'long',year:'numeric',month:'long',day:'numeric'};var today=新日期();console.log(toLocaleDateString(“en-US”));//9/17/2016console.log(toLocaleDateString(“en-US”,选项));//2016年9月17日,星期六console.log(toLocaleDateString(“hi IN”,选项));//शनिवार, 17सितंबर 2016

您也可以使用toLocaleString()方法来实现同样的目的。唯一的区别是该函数提供了不传递任何选项的时间。

// Example
9/17/2016, 1:21:34 PM

参考文献:

toLocaleString()到LocaleDateString()

其他回答

这里有一些随时可以粘贴的时间/日期格式代码,它不依赖任何外部模块/库,也不使用jQuery或ES7或任何东西。与其他答案中的代码不同,此代码提供了以下功能组合:

它将JavaScript Date对象作为输入它可以将日期显示为本地时区或UTC它使用了一个简单的格式化系统“{year4}{month02}{second}”,即使在编写代码后也很容易阅读和理解,而不像典型的“%D%m%-”,它总是强制您返回文档格式化系统不像某些特殊的“DD-MM-YYYY”系统那样具有任何奇怪的自冲突你可以在这里运行测试并尝试

//format_date(日期、模式、utc)//-日期//-JavaScript Date对象//-对当前时间使用“new Date()”//-模式//-嵌入{代码}的字符串,如//“{year4}-{month02}-{day02}:{dayname3}”//有关完整列表,请参阅下面的format_date_funcs//-其他字母不变//-utc//-如果为真,则显示UTC时间“区域”中的日期//-如果为假/忽略,则显示本地时区中的日期//变量月名称=[“一月”,“二月”,“三月”,“四月”,“五月”,“六月”,“七月”,“八月”、“九月”、“十月”、“十一月”、“十二月”];var星期名称=[“星期日”、“星期一”、“周二”,“周三”、“周四”、“周五”、“周六”];函数空间_pad2(num){返回num<10?“”+num:num;}函数zero_pad2(num){返回num<10?“0”+num:num;}函数空间_pad3(num){如果(num<10)return“”+num;否则,如果(num<100)return“”+num;其他的返回num;}函数zero_pad3(num){如果(num<10)return“00”+num;否则,如果(num<100)返回“0”+num;其他的返回num;}变量格式_日期_函数={//{year4}=“1902”//{year02}=“02”//“year4”:函数(日期,utc){var年=utc?date.getUTCFullYear():date.getFullYear();回归年;},“year02”:函数(日期,utc){var年=utc?date.getUTCFullYear():date.getFullYear();return year.toString().substr(2,2);},//{月}=“1”-“12”//{month2}=“1”-“12”(空格填充)//{month02}=“01”-“12”//“月”:函数(日期,utc){var月=utc?date.getUTCMonth():date.getMonth();//[0,11]回归月+1;},'month2':函数(日期,utc){var月=utc?date.getUTCMonth():date.getMonth();//[0,11]return space_pad2(月+1);},“month02”:函数(日期,utc){var月=utc?date.getUTCMonth():date.getMonth();//[0,11]返回zero_pad2(月+1);},//{monthname}=“一月”//{monthname3}=“一月”//“monthname”:函数(日期,utc){var月=utc?date.getUTCMonth():date.getMonth();//[0,11]return month_names[月];},“monthname3”:函数(日期,utc){var月=utc?date.getUTCMonth():date.getMonth();//[0,11]return month_names[month].substr(0,3);},//{day}=“1”-“31”//{day2}=“1”-“31”(空格填充)//{day02}=“01”-“31”//“day”:函数(日期,utc){var日期=utc?date.getUTCDate():date.getDate();//[1,31]返回日期;},“day2”:函数(日期,utc){var日期=utc?date.getUTCDate():date.getDate();//[1,31]return space_pad2(日期);},“day02”:函数(日期,utc){var日期=utc?date.getUTCDate():date.getDate();//[1,31]返回zero_pad2(日期);},//{dayname}=“星期二”//{dayname3}=“星期二”//“dayname”:函数(日期,utc){var日=utc?date.getUTCDay():date.getDay();//[0,6]返回day_of_wweek_names[day];},“dayname3”:函数(日期,utc){var日=utc?date.getUTCDay():date.getDay();//[0,6]返回day_of_wweek_names[day].substr(0,3);},//{24小时}=“0”-“23”//{24小时2}=“0”-“23”(空格填充)//{24小时02}=“00”-“23”//“24小时”:函数(日期,utc){var小时=utc?date.getUTCHours():date.getHours();//[0,23]回程时间;},“24小时2”:功能(日期,utc){var小时=utc?date.getUTCHours():date.getHours();//[0,23]返回space_pad2(小时);},“24小时02”:功能(日期,utc){var小时=utc?date.getUTCHours():date.getHours();//[0,23]返回zero_pad2(小时);},//{12小时}=“1”-“12”//{12小时2}=“1”-“12”(空格填充)//{12小时02}=“01”-“12”//{ampm}=“上午”或“下午”//{AMPM}=“AM”或“PM”//“12小时”:函数(日期,utc){var小时=utc?date.getUTCHours():date.getHours();//[0,23]小时=小时%12;//[0,11]如果(0===小时)小时=12;回程时间;},“12小时2”:功能(日期,utc){var小时=utc?date.getUTCHours():date.getHours();//[0,23]小时=小时%12;//[0,11]如果(0===小时)小时=12;返回space_pad2(小时);},“12小时02”:功能(日期,utc){var小时=utc?date.getUTCHours():date.getHours();//[0,23]小时=小时%12;//[0,11]如果(0===小时)小时=12;返回zero_pad2(小时);},“ampm”:函数(日期,utc){var小时=utc?date.getUTCHours():date.getHours();//[0,23]返回(小时<12?“上午”:“下午”);},“AMPM”:函数(日期,utc){var小时=utc?date.getUTCHours():date.getHours();//[0,23]返回(小时<12?“AM”:“PM”);},//{分钟}=“0”-“59”//{minute2}=“0”-“59”(空格填充)//{minute02}=“00”-“59”//“minute”:函数(日期,utc){var分钟=utc?date.getUTCMinutes():date.getMinutes();//[0,59]返回分钟;},“minute2”:函数(日期,utc){var分钟=utc?date.getUTCMinutes():date.getMinutes();//[0,59]返回space_pad2(分钟);},“minute02”:函数(日期,utc){var分钟=utc?date.getUTCMinutes():date.getMinutes();//[0,59]返回zero_pad2(分钟);},//{second}=“0”-“59”//{second2}=“0”-“59”(空格填充)//{second02}=“00”-“59”//“秒”:函数(日期,utc){var秒=utc?date.getUTCSeconds():date.getSeconds();//[0,59]

这可能有助于解决问题:

var d=新日期();var选项={day:'数字',月份:'long',年份:'数字'};console.log(d.toLocaleDateString('en-ZA',选项));

简单格式化程序:

function fmt(date, format = 'YYYY-MM-DDThh:mm:ss') {
  const pad2 = (n) => n.toString().padStart(2, '0');

  const map = {
    YYYY: date.getFullYear(),
    MM: pad2(date.getMonth() + 1),
    DD: pad2(date.getDate()),
    hh: pad2(date.getHours()),
    mm: pad2(date.getMinutes()),
    ss: pad2(date.getSeconds()),
  };

  return Object.entries(map).reduce((prev, entry) => prev.replace(...entry), format);
}

用法:

fmt(new Date(), 'YYYY-MM-DDThh:mm:ss'); // '2022-11-07T12:47:59'

Date构造函数(和Date.parse())在构造日期时只接受一种格式作为参数,即ISO 8601:

// new Date('YYYY-MM-DDTHH:mm:ss.sssZ')
const date = new Date('2017-08-15')

但由于浏览器的差异和不一致性,强烈不建议从字符串中解析(MDN建议不要使用日期字符串创建日期)。

建议的替代方法是直接从数字数据构建Date实例,如下所示:

new Date(2017, 7, 15) // Month is zero-indexed

这就是解析。现在,要将日期格式化为所需的字符串,您有几个date对象的本地选项(尽管我认为没有一个符合您所需的格式):

date.toString()       // 'Wed Jan 23 2019 17:23:42 GMT+0800 (Singapore Standard Time)'
date.toDateString()   // 'Wed Jan 23 2019'
date.toLocaleString() // '23/01/2019, 17:23:42'
date.toGMTString()    // 'Wed, 23 Jan 2019 09:23:42 GMT'
date.toUTCString()    // 'Wed, 23 Jan 2019 09:23:42 GMT'
date.toISOString()    // '2019-01-23T09:23:42.079Z'

对于其他格式选项,恐怕您必须使用Moment.js、day.js等库。

这篇文章中的日期格式提示归功于Zell Liew。

它在InternetExplorer11、Firefox和Chrome中的工作方式相同(当选择en-UK时,Chrome80.x显示12小时格式)。

const d=新日期('2010/08/05 23:45')//26.3.2020const dtfUK=新Intl.DateTimeFormat('UK',{年:'数字',月:'2位数',日:'2位',小时:'2-位数',分钟:'2-位',秒:'2-数位'})//const dtfUS=新Intl.DateTimeFormat('en',{年:'数字',月:'2位数',日:'2位',小时:'2-位数',分钟:'2-位',秒:'2-数位'})//console.log(dtfUS.format(d));//2010年5月8日下午11:45:00console.log(dtfUK.format(d));//05.08.2010 23:45:00/*node.js:2010年5月8日,晚上11:45:002010-08-05 23:45:00*/

有什么更一般的吗?

var d=新日期('2010-08-10T10:34:56.789Z');var str=d.toDateString()+/-2010年8月10日星期二“”+d.toTimeString().split(“”)[0]+/-12:34:56,GMT+0x0(GMT+00:00)“”+(d.getMonth()+101)+/-108“”+d.获取毫秒();//789console.log(str);//2010年8月10日星期二12:34:56 108 789console.log(//$1周二$2 8月$3 11$4 2020$5 12$6 34$7 56$8 108$9 789str.replace(/(\S{3})(\S}3)(\d{1,2})); // 2010年8月10日12:34.789(星期二)/*$1:星期二工作日字符串$2:8月短文本$3:11天$4:2010年$5:12小时$6:34分钟$7:56秒$8:08个月$9:789毫秒*/

或例如1行IIFE“库”;-)

控制台日志((函数(frm,d){return[d.toDateString(),d.toTimeString().split(“”)[0],(d.getMonth()+101),d.getMilliseconds()].jjoin(“).replace(/(\S{3})(\S})('$4/$8/$3$5:$6($1)',新日期()));

如果不需要,可以删除无用的部件和/或更改索引。