博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js 把字符串格式化成时间
阅读量:4677 次
发布时间:2019-06-09

本文共 1583 字,大约阅读时间需要 5 分钟。

一 需求

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

你可能感兴趣的文章
git + git flow 的简单介绍
查看>>
Servlet详解(四)--Request与Response
查看>>
如果我们想要交换两个数字,就可以使用位运算
查看>>
求给出第 K个 N位二进制数,该二进制数不得有相邻的“1”
查看>>
P1059 明明的随机数【去重排序】
查看>>
HDU 1060 Leftmost Digit【log10/求N^N的最高位数字是多少】
查看>>
tomcat配置文件web.xml与server.xml解析--重要
查看>>
【C语言】《C Primer Plus》递归:以二进制形式输出整数
查看>>
使用框架的——好处
查看>>
如此大量的代码,但每个类里面的代码却不显得特别多,原因。。。。。。。。。。。。...
查看>>
C#特征备忘
查看>>
intelil——快捷键
查看>>
Java 面向对象 之 final 关键字
查看>>
Contact Form 7邮件发送失败的解决办法
查看>>
How to use For loop in CruiseControl.net
查看>>
P1800 software_NOI导刊2010提高(06)
查看>>
Python学习日记(1)使用if __name__ == "main"
查看>>
二进制的最大公约数
查看>>
彻底弄懂 RTL级,行为级的区别
查看>>
关于PHP开发的9条建议
查看>>