如何将Date对象格式化为字符串?
当前回答
var today = new Date();
var formattedToday = today.toLocaleDateString() + ' ' + today.toLocaleTimeString();
其他回答
该模块可以轻松处理几乎所有的情况。它是一个更大的npm包的一部分,由Locutus提供,该包包含多种功能,但它可以完全独立于包本身使用,如果不使用npm(从模块更改为仅功能),只需复制粘贴/调整一点即可。
作为第二个参数,它接受时间戳,它可以来自任何地方,例如Date.getTime()。
此外,Locutus还在locatus包中维护了一个更大的datetime模块,这将提供一种更面向对象的使用方法。
在这里,您可以看到其他日期时间函数(作为模块),这些函数也非常有用。
您可以在这里找到关于参数和格式字符串的文档(注意,文档站点是一个PHP站点,但locatus实现遵循完全相同的规范)。
日期模块示例
date('H:m:s \\m \\i\\s \\m\\o\\n\\t\\h', 1062402400)//'07:09:40 m is month'
date('F j, Y, g:i a', 1062462400)//'September 2, 2003, 12:26 am'
date('Y W o', 1062462400)//'2003 36 2003'
var $x = date('Y m d', (new Date()).getTime() / 1000) $x = $x + '' var $result = $x.length // 2009 01 09 10
date('W', 1104534000) //'52'
date('B t', 1104534000) //'999 31'
date('W U', 1293750000.82); // 2010-12-31 '52 1293750000'
date('W', 1293836400); // 2011-01-01 '52'
date('W Y-m-d', 1293974054); // 2011-01-02 '52 2011-01-02'
它在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)',新日期()));
如果不需要,可以删除无用的部件和/或更改索引。
自定义格式设置函数:
对于固定格式,一个简单的函数即可完成任务。以下示例生成国际格式YYYY-MM-DD:
函数dateToYMD(日期){var d=date.getDate();var m=date.getMonth()+1//从0到11的月份var y=date.getFullYear();返回“”+y+“-”+(m<=9?“0”+m:m)+”-“+(d<=9!“0”+d:d);}console.log(dateToYMD(新日期(2017,10,5));//11月5日
OP格式可以如下生成:
函数dateToYMD(日期){var strArray=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];var d=date.getDate();var m=strArray[date.getMonth()];var y=date.getFullYear();返回“”+(d<=9?“0”+d:d)+“-”+“+m+”-“+y;}console.log(dateToYMD(新日期(2017,10,5));//11月5日
注意:然而,扩展JavaScript标准库通常不是一个好主意(例如,通过将此函数添加到Date的原型中)。
更高级的功能可以基于格式参数生成可配置的输出。
如果编写一个格式化函数太长,那么周围有很多库可以执行它。其他一些答案已经列举了它们。但日益增加的依赖性也有反作用。
标准ECMAScript格式化函数:
自从ECMAScript的最新版本以来,Date类具有一些特定的格式化函数:
toDateString:依赖于实现,仅显示日期。https://262.ecma-international.org/#sec-日期.协议类型.日期new Date().toDateString();//例如“2016年11月11日星期五”
toISOString:显示ISO 8601日期和时间。https://262.ecma-international.org/#sec-日期.协议类型.toisostringnew Date().toISOString();//例如“2016-11-21T08:00:00.000Z”
toJSON:JSON的Stringer。https://262.ecma-international.org/#sec-日期.原型.项目new Date().toJSON();//例如“2016-11-21T08:00:00.000Z”
toLocaleDateString:依赖于实现,区域设置格式的日期。https://262.ecma-international.org/#sec-日期.协议类型.颜色日期字符串new Date().toLocaleDateString();//例如“2016年11月21日”
toLocaleString:依赖于实现,是区域设置格式的日期和时间。https://262.ecma-international.org/#sec-日期.协议类型.颜色字符串new Date().toLocaleString();//例如“2016年11月21日上午08:00:00”
toLocaleTimeString:依赖于实现,以区域设置格式表示时间。https://262.ecma-international.org/#sec-日期.协议类型.颜色时间字符串new Date().toLocaleTimeString();//例如“08:00:00 AM”
toString:日期的通用toString。https://262.ecma-international.org/#sec-日期.协议类型.测试new Date().toString();//例如“2016年11月21日星期五08:00:00 GMT+0100(西欧标准时间)”
注意:可以使用这些格式生成自定义输出>
new Date().toISOString().slice(0,10)//返回YYYY-MM-DD
示例片段:console.log(“1)”+new Date().toDateString());console.log(“2)”+new Date().toISOString());console.log(“3)”+new Date().toJSON());console.log(“4)”+new Date().toLocaleDateString());console.log(“5)”+new Date().toLocaleString());console.log(“6)”+new Date().toLocaleTimeString());console.log(“7)”+new Date().toString());console.log(“8)”+new Date().toISOString().slice(0,10));
指定标准函数的区域设置:
上面列出的一些标准函数取决于语言环境:
到LocaleDateString()到LocaleTimeString()到LocalString()
这是因为不同的文化使用不同的格式,并以不同的方式表达他们的日期或时间。默认情况下,该函数将返回在其运行的设备上配置的格式,但这可以通过设置参数(ECMA-402)来指定。
toLocaleDateString([locales[, options]])
toLocaleTimeString([locales[, options]])
toLocaleString([locales[, options]])
//e.g. toLocaleDateString('ko-KR');
选项第二个参数允许在所选区域设置中配置更具体的格式。例如,月份可以显示为全文或删节。
toLocaleString('en-GB', { month: 'short' })
toLocaleString('en-GB', { month: 'long' })
示例片段:console.log(“1)”+new Date().toLocaleString('en-US'));console.log(“2)”+new Date().toLocaleString('ko-KR'));console.log(“3)”+新日期().toLocaleString('de-CH'));console.log(“4)”+new Date().toLocaleString('en-GB',{hour12:false}));console.log(“5)”+new Date().toLocaleString('en-GB',{hour12:true}));
关于区域设置的一些良好做法:
大多数人不喜欢他们的日期以外国人的格式显示,因此,尽可能保持默认的语言环境(而不是到处设置“en-US”)。实现从UTC到UTC的转换可能具有挑战性(考虑到DST、时区不是1小时的倍数等)。尽可能使用经过良好测试的库。不要假设语言环境与一个国家相关:几个国家都有很多语言环境(加拿大、印度等)避免通过非标准方式检测区域设置。在这里,您可以了解到多个陷阱:检测键盘布局、按地理位置检测区域设置等。。
这里有一些随时可以粘贴的时间/日期格式代码,它不依赖任何外部模块/库,也不使用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]
不使用任何外部库的JavaScript解决方案:
var now = new Date()
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
var formattedDate = now.getDate() + "-" + months[now.getMonth()] + "-" + now.getFullYear()
alert(formattedDate)