一个JS自定义日期格式化方法,包括了不少知识点,以下方法来自jQuery DataTable中文的官方参考

//return (new Date(data)).Format("yyyy-MM-dd hh:mm:ss");
Date.prototype.Format = function (fmt) {
var o = {
"M+": this.getMonth() + 1,//当前对象的"月"
//月份
"d+": this.getDate(),//当前对象的"日"
//日
"h+": this.getHours(),
//小时
"m+": this.getMinutes(),
//分
"s+": this.getSeconds(),
//秒
"q+": Math.floor((this.getMonth() + 3) / 3),
//季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) { //开始解析由参数传入的模板,将模板中的y"刷"成实际年,RegExp.$1是模板中被替换字符,参数2是实际年份,但是需要根据年份的模板长度来截取,如年份模板是yyyy,substr(0),效果是从年份字符串起始位置0处截取年份,如果年份模板是yy,那么substr(2),表示从年份字符串第3位置截取年份
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) { //遍历正则模板与对应的值
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));//模板对应的占位符替换实际的日期值,o[k]当前日期对象值(年,月,日,分,时,秒),
}
}
return fmt;
}

思考: 怎样根据日期模板来填充实际时间; 程序要解决的问题包括, 解析日期模板,当然日期模板含义是预定义的,如yyyy在解析时就用年份替换.
程序逻辑:1).判断模板中有"年份"模板吗? 2).通过正则表达式定位模板中的年份字面值(RegExp.$1);3).获取实际年份值(this.getFullYear()),在获取实际年份值时,外带考虑模板的长度来截取年份;4).这里正则表达式对象用了2种语法,值得学习,使用new RegExp()方式是因为正则表达式对象是"动态"拼接;5).遍历JS对象的属性名和属性值很巧妙的编程方式,和PHP中的关联数组很像
6).替换模板与替换值用JS对象的数据结构进行封装,感觉非常妙.
stringObj.replace(old, new)
fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
当模板中被提取的要被替换的占位符长度=1时,就直接将对象属性值进行replace,所以程序是支持"y-M-d h:m:s"这样的短模板的。
004.length的值居然是1,并且由于原始的o[k]数据类型不是string,它没有length属性,所以使用+""方式将其转化成string。
为什么要做RegExp.$1.length == 1这样的判断,是因为当要被替换的占位符长度>1时,使用("00" + o[k]).substr(("" + o[k]).length))这样的字符进行模板填充
("00" + o[k]).substr(("" + o[k]).length)),o[k]值的长度不满2位时,补0技巧代码,注意只适用时间2位长度字面值的处理.

题外话,我不知道这么妙的方法是不是原创于中国的大牛之手,我觉得里面充满了对JS的原生理解.

参考JS中的prototype

javaScript prototype实例(正则) 自定义日期格式化方法的更多相关文章

  1. javascript日期格式化方法汇总

    本文给大家汇总介绍了javascript格式化日期时间的几种常用方法,个人对最后一种个性化输出时间比较有兴趣,基本上只要项目中能用到都是使用这种,推荐给小伙伴们. 方法一: ? 1 2 3 4 5 6 ...

  2. Java日期格式化方法

    首先获取当前系统时间的方法有两种:第一种可以用currentTimeMillis()方法获取,它其实产生的是一个当前的毫秒数,这个毫秒是自1970年1月1日0时起至现在的毫秒数,类型是long 型,可 ...

  3. JavaScript Date日期对象以及日期格式化方法

    前言 Date对象是javascript语言中内置的数据类型,用于提供日期和时间的操作接口.Date对象是在早期java中的java.util.Date类基础上创建的,为此,Date类型使用自UTC1 ...

  4. javascript常用开发笔记:一个简单强大的js日期格式化方法

    前言:一直没找到好用的javascript日期格式化工具,自己写了一个,方便以后复用 1.主要功能 (1)支持任意顺序的日期格式排列:yyyy=年,MM=月,dd=日,HH=时,mm=分,ss=秒,s ...

  5. 使用js在HTML中自定义字符串格式化方法

    Python中支持字符串格式化,其基本形式如下: str = "I'm {name},{age} years old" print(str.format(name="te ...

  6. spingmvc 返回json数据日期格式化方法

    第一种: json 用的是这个依赖 <!-- JSON lib 开发包 以及它的依赖包 --> <dependency> <groupId>com.fasterxm ...

  7. php日期格式化方法详解

    php日期格式化一般使用date()来完成,此函数的声明及定义如下图所示,其参数有很多,这里按常用的年.月.日.时.分.秒.星期来简单介绍. date(format,timestamp) 一.年.月. ...

  8. js日期格式化方法 dateFormatFn

    var dateFormatFn=function(val,fmt){ var _this = new Date(val); console.log(_this,_this.getFullYear() ...

  9. jQuery Validate 表单验证插件----自定义一个验证方法

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...

随机推荐

  1. jq 遍历 each方法

    1.选择器+遍历 $('div').each(function (i){ i就是索引值 this 表示获取遍历每一个dom对象 }); 2.选择器+遍历 $('div').each(function  ...

  2. linux服务器中Apache隐藏index.php失败

    可以通过URL重写隐藏应用的入口文件index.php,下面是相关服务器的配置参考: [Apache] httpd.conf配置文件中加载了mod_rewrite.so模块 AllowOverride ...

  3. 前端开发之JavaScript HTML DOM理论篇一

    主要内容: 1.DOM简介 2.DOM 节点 3.DOM 方法和属性 4.DOM 访问和修改 一.DOM简介 1.什么是 DOM? DOM 是 W3C(万维网联盟)的标准. DOM 定义了访问 HTM ...

  4. bash's [ command & [[ keyword

    [bash's [ command & [[ keyword] [ (test) command: bash中的条件测试語句, [ condition ], 并不是一个語句, 而是一个命令, ...

  5. 117. Populating Next Right Pointers in Each Node II 计算右边的附属节点

    [抄题]: Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNod ...

  6. Openssl s_time命令

    一.简介 s_time是openss提供的SSL/TLS性能测试工具,用于测试SSL/TSL服务 二.语法 openssl s_time [-connect host:port] [-www page ...

  7. Python爬虫入门七之正则表达式

    在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的 ...

  8. [SHELL]:let 命令详解

    [SHELL]:let 命令详解 摘自:https://blog.csdn.net/happygongzhuo/article/details/6819099 let :简单的计算器  语 法let[ ...

  9. log4j-over-slf4j工作原理详解

    log4j-over-slf4j工作原理详解 摘自:https://blog.csdn.net/john1337/article/details/76152906 置顶 2017年07月26日 17: ...

  10. OSAL的原理

    讲解协议栈怎么运行起来!!回顾:1.应用层是一个任务,它有一个系统分配给他的数值唯一的编号叫做任务ID 2.任务可以处理事件,处理事件的这些代码都在一个函数里,这个函数叫任务事件处理函数 3.应用层任 ...