一个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. multiprocessing.dummy

    昨晚发现放在腾讯云主机上通过crontab定时执行用以爬去斗鱼分类页面数据的爬虫在执行的时候速度特别慢,于是想通过多线程来提高效率. 打开浏览器,键入关键字"python 多线程" ...

  2. Java后端发送email实现

    依赖的jar包 <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail& ...

  3. DirectShow的RTP发包(H264)Filter <转>

    转帖地址:http://blog.csdn.net/fan2273/article/details/77653700 DirectShow的RTP发包(H264)Filter 基于DirectShow ...

  4. redis 批量删除键

    主题 为啥会有这篇文章呢? 在redis里我需要批量删除一些 "特殊" 的数据...这些特殊的数据用正常方法比较难删除...所以记录一下我的删除方法.. 背景与问题 我再用Spri ...

  5. elasticsearch 安装 head插件

    head插件 切换到Elasticsearch的安装目录 cd ~/demo/elasticsearch/es1 执行安装命令 [root@localhost es1]# bin/plugin ins ...

  6. go cobra

    https://github.com/spf13/cobra https://github.com/spf13/cobra/blob/master/bash_completions.md go get ...

  7. Eclipse快捷键大全(补充)

    Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+Shift+O 自动导入所需要的包(这个用的次数也相当多)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增 ...

  8. 49. Group Anagrams同义词合并

    [抄题]: Given an array of strings, group anagrams together. Example: Input: ["eat", "te ...

  9. 配置GIT DIFF/MERGE TOOL

    关闭prompt backup git config --global difftool.prompt false git config --global mergetool.prompt false ...

  10. Texstudio

    Texstudio快捷键:Ctrl+T,选中之后按这个可以快速注释