javascript使用prototype格式化Date

有时浏览器中使用官方toLocalXXX() 方法并不能转换时间,
这里使用原型对象创建一个函数,再调用使用,可以达到定制日期时间转指定格式字符串

<script type="text/javascript">
// 对Date的扩展,将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, 
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)  
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2020-01-01 01:01:01.123 
// (new Date()).Format("yy-M-d h:m:s.S")      ==> 20-1-1 1:1:1.123
// (new Date()).Format("yyyyMMdd")   ==> 20200101
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)) 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)));
    return fmt;
} 
// 测试
var time1 = new Date();
time1.setTime(time1.getTime()+24*60*60*1000);
time1 = time1.Format("yyyy-MM-dd")
var time2 = new Date();
time2.setTime(time2.getTime()+24*60*60*1000);
time2 = time2.Format("yy-M-d h:m:s.S");
var time3 = new Date().Format("yyyyMMdd");
document.write("Result1: " + time1);
document.write("<br>")
document.write("Result2: " + time2);
document.write("<br>")
document.write("Result3: " + time3);
</script>

promotype概念:
JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,
以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾
所有的 JavaScript 对象都会从一个 prototype(原型对象)中继承属性和方法:
Date 对象从 Date.prototype 继承。
Array 对象从 Array.prototype 继承。
Person 对象从 Person.prototype 继承

发布了522 篇原创文章 · 获赞 87 · 访问量 75万+

猜你喜欢

转载自blog.csdn.net/jc_benben/article/details/103779479