js 把字符串格式化成时间

一 需求

js里面的Date.parse() 方法接收字符串,返回一个时间,但是接收的字符串格式缺不能指定,这很蛋疼,这样就有了浏览器差异,所以需要一个可以指定字符串格式的方法,将时间字符串转化为时间

二 分析

难点在于占位符个数的问题,需要格式字符串和时间字符串完全的匹配才可以,这样就限制了功能,但是目前我还没想到什么办法来解决这个问题,只能做一个初步的实现,满足我基本的需求

三 代码

/**
 * 根据formatter字符串转换时间字符串
 * 月(M)、日(d)、小时(h)、分(m)、秒(s) 占位符个数需要和时间字符串匹配
 * @param  {string} dateStr 时间字符串 如:"2015-11-12"
 * @param  {string} fmt     格式化字符串 如:"yyyy-MM-dd"
 * @return {Date}           标准时间
 * author: shaojiasong 2015-12-29
 */
function parseDate(dateStr,fmt){
    if(!dateStr || !fmt || (dateStr.length != fmt.length)) {
        throw new Error("转换时间时发生错误,时间字符串与格式字符串不匹配!");
    }
        //排除特殊字符,避免正则发生错误
        fmt = fmt.replace(/([\^\$\.\*\+\?\=\!\:\|\\\/\(\)\[\]\{\}])/ig,"\\$1");
    function getReg(str){
        var cfmt = fmt;
        cfmt = cfmt.replace(new RegExp(str+"+","g"),function(full){ return "("+full+")";}) || "";
        return cfmt.replace(/[yMdhmsS]/g,"\\d"); 
    }
    var year   = parseInt((new RegExp(getReg("y")).exec(dateStr)[1])) || 0;
    var month  = parseInt((new RegExp(getReg("M")).exec(dateStr)[1])) - 1 || 0;
    var day    = parseInt((new RegExp(getReg("d")).exec(dateStr)[1])) || 0;
    var hour   = parseInt((new RegExp(getReg("h")).exec(dateStr)[1])) || 0;
    var minute = parseInt((new RegExp(getReg("m")).exec(dateStr)[1])) || 0;
    var second = parseInt((new RegExp(getReg("s")).exec(dateStr)[1])) || 0;

    return new Date(year,month,day,hour,minute,second);
}

用例

var mydate = parseDate("2015-11-12 12:25:30","yyyy-MM-dd hh:mm:ss"); //结果: Thu Nov 12 2015 12:25:30 GMT+0800 (中国标准时间)

如果有别的实现,欢迎留言给我,谢谢~

转载于:https://www.cnblogs.com/cnjs/p/5085455.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值