我们已经准备好了,你呢?

2026我们与您携手共赢,为您的企业形象保驾护航!

衷心感谢某位前辈贡献的日期时间格式化代码,其功能强大,表现优异!

前言:

虽然为我们提供了多种获取Date对象属性的方法,例如:获取年、月、日、时、分、秒等,然而,它并没有像Java那样提供一个允许用户根据自定义模板来格式化特定时间对象的功能。因此,我自行编写了一个小工具,仅供大家闲暇时娱乐使用,如若您有更好的建议,欢迎不吝赐教。

用到知识点:

该对象指的是当前正在运行的函数及其调用函数时的参数,它不能被直接创建。尽管它拥有属性,并且可以通过类似数组的语法进行值访问,但实际上它并不等同于数组。

运算符用于返回表达式的数据类型对应的字符串表示,具体可能包括六种情况:逗号、空格、引号、竖线、斜杠和点号。

在创建对象的函数中,需要指定对象或函数的名称。基础数据类型不具备这一属性。

exec方法:在字符串中运用正则表达式进行搜索,并将搜索到的结果以数组形式返回。若未发现任何匹配项,则返回null。数组内不会包含重复的同类型匹配元素。

使用正则表达式或特定子字符串,对字符串进行分割操作,随后将得到的各个子字符串组合成一个字符串数组,并输出。

抛出包含信息的错误对象Error,该对象携带特定信息。在throw之后,可以接上任意表达式。

还有一些诸如for...in的用法,以及三元运算符等,这些内容就不详细介绍了,它们相对比较直观易懂。

代码片段:

/**
 * ***js时间日期格式化*** 
*

模版字符串需遵循严格的格式规范,若格式超限将引发异常,并且每种格式只能使用一次,例如:yyyy-mm-dd格式若使用不当,系统将抛出错误。 *

* y-年 length: 2/4位
* q-季度 length: 1位
* M-月 length: 1~2位
* d-日 length: 1~2位
时间表示为1至2位数字,采用24小时制;而小时则使用12小时制。
* m-分 length: 1~2位
* s-秒 length: 1~2位
* S-毫秒 length: 固定1位 * @param {Date类型对象} date * @param {String类型模板字符串} fmt * @return 格式化后时间日期字符串 * @author lyt 该内容属于版权保护范畴,请勿擅自复制或传播。 */ 定义一个名为DateFormat的函数,该函数接收两个参数:日期date和格式化字符串fmt。 若参数数量非二,// 进行参数数量核对 抛出错误信息:“参数数量不符合规定”; 若日期参数不存在,或其类型并非对象,亦或其构造函数与Date类型不匹配,则进行参数合法性检查。 若参数[0]并非Date类型,则抛出错误信息:“参数[0]的类型不正确”; 若格式字符串中包含大写或小写的"H",并且同时包含大写或小写的"h"。 抛出异常信息:“时间格式存在错误,同一类型的元素不得连续出现两次!” /* 模板参数校验,正则验证方法 */ var verify = function(Rex ){ 通过使用正则表达式Rex,我们创建了新的正则对象,并利用该对象执行了fmt字符串的匹配操作,从而得到了一组匹配结果数组。 if (!arr) // 匹配失败返回 return ""; 若fmt按Rex进行分割后的结果长度超过两个,// 同种类型的元素在间隔中重复出现不止一次。 抛出错误信息:“格式有误,相同类型的元素不能连续出现。” return arr[0]; }; /** * 提供月、天、时、分、秒通用匹配替换 * @param {对象o属性key} r * @param {r对应正则对象} rex **/ 定义一个名为common的函数,其参数包括r和rex。 if(len !=1 && len !=2) 抛出异常信息:“月份的格式存在错误,'M'字符只能出现一次或两次。” 若长度等于2,则格式化字符串fmt将替换掉正则表达式rex匹配的部分,替换后的结果取决于o[r]的长度:若o[r]长度为1,则替换为"0"加上o[r]的值;否则,直接替换为o[r]的值。若长度不等于2,则仅将fmt中匹配到的rex部分替换为o[r]。 } var o = { // 数据存储对象 获取当前年份的数字表示,通过连接字符串的方式将年份值转换为字符串形式。 日期的月份加三后,除以三的商数,通过Math.floor函数取整,得到的是季度数。 "M+": 将日期对象的月份加1后,转换为字符串形式,即date.getMonth() + 1 + ""。 日期的值等于当月日数与字符串“”相加的结果。 获取当前时间的小时部分,以24小时制表示,结果通过字符串连接转换为字符串类型。 获取当前小时数,并转换为字符串形式,若为12时则表示为"h+"。 获取分钟数,将日期对象的分钟部分与字符串拼接,形成字符串形式的分钟值。 获取当前时间的秒数,并将其转换为字符串形式,结果为:date.getSeconds() + ""。 日期对象的毫秒值获取,通过使用S+表达式实现。 } for(var r in o) { var rex, len, temp; rex = new RegExp(r); temp = 验证函数对正则表达式rex进行匹配; len = temp.length; // 长度 if(!len || len == 0) continue; if(r == "y+") { if(len !=2 && len != 4) 抛出异常信息:“年份的格式有误,'y'字符只能出现两次或四次。” 若长度等于2,则格式化字符串fmt中将正则表达式rex匹配到的部分替换为o[r]数组中索引为r的元素从第3个字符开始的3个字符;否则,仅将格式化字符串fmt中匹配到的正则表达式rex部分替换为o[r]数组中索引为r的元素。 } else if(r == "q+") { if(len != 1) 抛出异常信息:“季度格式存在错误,'q'字符仅允许出现一次。” fmt=fmt.replace(rex, o[r]); } else if(r == "h+") { if(len !=1 && len !=2) 抛出错误信息:“时间格式存在偏差:'h'字符仅允许出现一次或两次。” 变量h等于(o[r]大于12时,o[r]减去12,否则直接使用o[r]),然后将其转换为字符串。 若长度等于2,则格式化字符串fmt中匹配到的正则表达式rex对应的替换内容为:当h的长度为1时,替换为"0"加上h,否则直接替换为h;若长度不等于2,则格式化字符串fmt中匹配到的正则表达式rex对应的替换内容仅是h。 } else if(r == "S+") { if(len != 1) 抛出异常信息:“错误:在毫秒数格式中,字符'S'只能出现一次。” fmt=fmt.replace(rex, o[r]); 否则,若(r等于"M+"、r等于"d+"、r等于"H+"、r等于"m+"或r等于"s+")。 common(r, rex) } } return fmt; }

上几个演示效果,供大家参考:

记录当前时间,格式为“yyyy年第q季度M月dd日HH时m分s秒S毫秒”。

记录下当前日期和时间,格式为“yyyy年yy第q季度M月dd日HH时m分s秒S毫秒”,使用Date对象生成。

记录当前日期和时间,格式为“yyyy年第q季度M月dd日Hh时m分s秒S毫秒”,具体操作通过调用.log函数实现。

记录日志信息:(表明身份非时间对象,具体为)'yyyy年'的第'q季度'的'M月'日,'Hh时'm分's秒',以及'S毫秒'。

记录当前时间,格式为“yyyy年第q季度MMM月dd日HH时m分s秒S毫秒”。

其他功能暂不详细说明,有兴趣者可自行复制代码进行体验,如发现任何问题或需要改进之处,敬请不吝赐教。

通过以上内容给大家详解了时间格式化相关知识,希望大家喜欢。

Java免费学习笔记:立即学习

解锁 Java 大师之旅:从入门到精通的终极指南

二维码
扫一扫在手机端查看

本文链接:https://by928.com/10409.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线