码迷,mamicode.com
首页 > Web开发 > 详细

分享一个将指定日期格式的字符串转为日期的js函数toDate

时间:2015-05-03 19:03:40      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

今天发现easyui的datetimebox不能正常显示日期,接着自然就是实现toDate的功能,google了下,没找到满意的,都写的很罗嗦。自己写一个,本来以为js的正则也可以用命名group来弄,但是目前看javascript好像不支持。现在实现的代码如下,希望对有需要的人也有帮助。


//by dragonimp 2015.5.3
//使用方法:
//"2015-5-5 9:10:10".toDate("yyyy-M-d hh:mm:ss")
//"2015/5/5 9:10:10".toDate("yyyy/M/d hh:mm:ss")
String.prototype.toDate = function (fmt) {
    if (fmt == null) fmt = 'yyyy-MM-dd hh:mm:ss';
    var str = this;
    //fmt为日期格式,str为日期字符串
    var reg = /([yMdhmsS]+)/g;//日期格式中的字符
    var key = {};
    var tmpkeys = fmt.match(reg);
    for (var i = 0 ; i < tmpkeys.length; i++) {
        key[tmpkeys[i].substr(0, 1)] = i + 1;
    }
    var r = str.match(fmt.replace(reg, "(\\d+)"));
    return new Date(r[key["y"]], r[key["M"]] - 1, r[key["d"]], r[key["h"]], r[key["m"]], r[key["s"]], r[key["S"]]);
}

附:easyui的问题和解决方法。

问题:

<input  type="text" value="2015/5/6 23:00:00" id="xxxx" class="easyui-datetimebox" />
这个显示出来的控件,日期的“日”部分显示不正确,会显示当天的日期。

检查了下,easyui已经引用了中文的资源文件,看了下资源文件,应该只支持"-"分割的日期,我这里是"/"

解决:需要自己实现formatter和parser。

1.加上options

<input  type="text" value="2015/5/6 23:00:00" id="xxxx" class="easyui-datetimebox" data-options="formatter:datetimebox_format,parser:datetimebox_parse" />

2.实现解析和格式化函数

function datetimebox_format(date) {
return date.toFormatString("yyyy/M/d h:mm:ss");
}
function datetimebox_parse(s) {  
return s.toDate("yyyy/M/d hh:mm:ss");  
}  

//a)转日期的,见前面我的toDate
//b)下面转字符串的,来自网上

Date.prototype.toFormatString = 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;
}


分享一个将指定日期格式的字符串转为日期的js函数toDate

标签:

原文地址:http://blog.csdn.net/dragonimp/article/details/45460557

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!