`
leeqq
  • 浏览: 137414 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

js 时间 和字符串之间的转化

    博客分类:
  • web
阅读更多

之前写到过,js中new Date()能接受的字符串格式,各个浏览器不一样,这次写了个关于时间对象和字符串之间的转化的方法

 

时间对象转化为字符串

 

function formatDate (date, format) {
    var convert, res = '';
    convert = {
        'y': function (str) {
            return (date.getFullYear() + '').slice(-(str.length < 4 ? 2 : str.length));
        },
        'M': function (str) {
            var length, m, month, monthName;
            length = str.length < 6 ? str.length : 6;
            month = date.getMonth() + 1;
            monthName = [
                ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
                ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
                ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
                ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
            ];
            if (length === 1) {
                m = month;
            } else if (length === 2) {
                m = ('0' + month).slice(-2);
            } else {
                m = monthName[length - 3][month - 1];
            }
            return m;
        },
        'd': function (str) {
            var d = date.getDay();
            return str.length === 1 ? d : ('0' + d).slice(-2);
        },
        'H': function (str) {
            //24小时制
            var h = date.getHours();
            res = '';
            return str.length === 1 ? h : ('0' + h).slice(-2);
        },
        'h': function (str) {
            //12小时制
            var h;
            h = date.getHours();
            res = ' AM';
            if (h > 12) {
                h = h - 12;
                res = ' PM';
            }
            return str.length === 1 ? h : ('0' + h).slice(-2);
        },
        'm': function (str) {
            var m = date.getMinutes();
            return str.length === 1 ? m : ('0' + m).slice(-2);
        },
        's': function (str) {
            var s = date.getSeconds();
            return str.length === 1 ? s : ('0' + s).slice(-2);
        },
        'S': function (str) {
            var s = date.getMilliseconds();
            return str.length === 1 ? s : ('00' + s).slice(-3);
        },
        'D': function (str) {
            var d, name, length;
            name = [
                ['Sun', 'Mon','Tue','Wed','Thu','Fri','Sat'],
                ['Sunday', 'Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
                ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
                ['周日','周一','周二','周三','周四','周五','周六']
            ];
            d = date.getDay();
            length = str.length < 4 ? str.length : 4;
            return name[length - 1][d];
        }
    }
    return format.replace(/y+|M+|d+|H+|h+|m+|s+|S+|D+/g, function (str) {
        return convert[str.charAt(0)](str);
    }) + res;
}

 

 符号解释

   y  : 年份 yy两位数 yyyy四位数

   M : 月份 M 数字无前置的0,MM有前置0,MMM英文缩写,MMMM英文完整写法,MMMMM中文如十二月 ,MMMMMM 数字+月 如 6月 无前置0

   d  : 日 d无前置0,dd有前置0

   H  : 24小时制 H无前置0,HH有前置0

   h  : 12小时制 h无前置0,hh有前置0 (会在结果字符串末尾加上AM或者PM)

   m : 分钟 m无前置0,mm有前置0

   s  : 秒数 s无前置0,ss有前置0

   S  : 毫秒数 S无前置0,SSS有前置0(SS也一样)

   D  : 星期 D英文缩写,DD英文完整写法,DDD中文如星期三,DDDD中文如周三

 如 formatDate(new Date(), 'dd-MMM-yyyy HH:mm:ss SSS')

 

字符串转为时间对象

 

function parseDate (str, format) {
    var type, convert, year = 1970, month = 1, day = 1, hour = 0, minute = 0, second = 0, milli = 0, date;
    convert = {
        'y': function () {
            format = format.replace(/y+/, function (match) {
                var length;
                length = match.length;
                year = str.substring(0, length);
                str = str.replace(year, '');
                year = Number(year);
                return '';
            });
            return year;
        },
        'M': function () {
            month = undefined;
            format = format.replace(/M+/, function (match) {
                var length, single, tens, monthName;
                length = match.length;
                monthName = 'JAN1FEB2MAR3APR4MAY5JUN6JUL7AUG8SEP9OCT10NOV11DEC12一1二2三3四4五5六6七7八8九9十10十一11十二12';
                if (length < 3) {
                    str = str.replace(/^\d{1,2}/, function (num) {
                        month = Number(num);
                        return '';
                    });
                } else if (length < 6) {
                    var name, reg;
                    name = str.match(/\D+/)[0];
                    reg = new RegExp(name.substring(0,3).replace('月', '').toUpperCase() + '(\\d+)');
                    month = Number(monthName.match(reg)[1]);
                    str = str.replace(name, '');
                } else {
                    var match;
                    match = str.match(/(\d+)月/);
                    month = Number(match[1]);
                    str = str.replace(match[0], '');
                }
                return '';
            });
            return month;
        },
        'd': function () {
            day = undefined;
            format = format.replace(/d+/, function () {
                str = str.replace(/^\d{1,2}/, function (match) {
                    day = Number(match);
                    return '';
                });
                return '';
            });
            return day;
        },
        'h': function () {
            var apm;
            hour = undefined;
            format = format.replace(/h+/, function () {
                str = str.replace(/^\d{1,2}/, function (match) {
                    hour = Number(match);
                    return '';
                });
                return '';
            });
            apm = str.match(/AM|PM/i)[0];
            if (apm && apm.toUpperCase() === 'PM') {
                hour += 12;
            }
            str = str.replace(/AM|PM/ig, '');
            return hour;
        },
        'H': function () {
            hour = undefined;
            format = format.replace(/H+/, function () {
                str = str.replace(/^\d{1,2}/, function (match) {
                    hour = Number(match);
                    return '';
                });
                return '';
            });
            return hour;
        },
        'm': function () {
            minute = undefined;
            format = format.replace(/m+/, function () {
                str = str.replace(/^\d{1,2}/, function (match) {
                    minute = Number(match);
                    return '';
                });
                return '';
            });
            return minute;
        },
        's': function () {
            second = undefined;
            format = format.replace(/s+/, function () {
                str = str.replace(/^\d{1,2}/, function (match) {
                    second = Number(match);
                    return '';
                });
                return '';
            });
            return second;
        },
        'S': function () {
            milli = undefined;
            format = format.replace(/S+/, function () {
                str = str.replace(/^\d{1,2}/, function (match) {
                    milli = Number(match);
                    return '';
                });
                return '';
            });
            return milli;
        }
    };
    format = format.replace(/^[^a-zA-Z]+/, '');
    str = str.replace(/^[^a-zA-Z0-9一二三四五六七八九十]+/, '');
    while(type = format.charAt(0)) {
        if (convert[type] && convert[type]() !== undefined) {
            format = format.replace(/^[^a-zA-Z]+/, '');
            str = str.replace(/^[^a-zA-Z0-9一二三四五六七八九十]+/, '');
        } else {
            date = new Date('Invalid Date');
            break;
        }
    }
    date || (date = new Date(year, month - 1, day, hour, minute, second, milli));
    return date;
}

 

符号的意义是一样的,只是这里没有D(星期的符号),要注意的是这里不要传没有分割符无前置0的字符串如 parseDate('2012112', 'yyyyMd') 这样没法判断是2012-11-2还是2012-1-12,为结果正确请传入有分割符的字符串如 ‘2012/11/26’ 或者 ‘2012-Aug-19’……

 

如发现有转化不正确的,请指正

分享到:
评论

相关推荐

    js中的json对象和字符串之间的转化

    2. **字符串与JSON对象之间的转化**:JavaScript提供了两个内置函数来实现这种转化:`JSON.stringify()`用于将JavaScript对象转换为JSON字符串,`JSON.parse()`用于将JSON字符串转换回JavaScript对象。 **描述中的...

    javascript实现的字符串与十六进制表示字符串相互转换方法

    本文实例讲述了javascript实现的字符串与十六进制表示字符串相互转换方法。分享给大家供大家参考。具体如下: 之所以写这个,是因为发现SQL注入和XSS中经常利用十六进制表示的字符串,比如 SELECT CONCAT(0x68656c6...

    js把字符串转换成变量

    在JavaScript(JS)中,将字符串转换为变量是一项常见的任务,尤其在动态编程或处理用户输入时。在JavaScript中,有几种方法可以实现这个目标,主要涉及到`eval()`函数、`window[]`对象以及`new Function()`构造函数...

    JavaScript 实现JSON和字符串之间转换

    JavaScript 实现JSON和字符串之间转换

    时间字符串转换成日期对象datetime的方法

    您可能感兴趣的文章:sql语句中如何将datetime格式的日期转换为yy-mm-dd格式将WMI中的DateTime类型转换成VBS时间的函数代码LINQ字符串向datetime 转换时失败的处理方法Sql中将datetime转换成字符串的

    字符串转换时间

    - **JavaScript**: JavaScript中,可以使用`Date.parse()`或`new Date()`构造函数将字符串转换为日期对象。 - **Java**: Java中,`SimpleDateFormat`类是用于日期时间格式化的工具,配合`parse()`方法完成字符串到...

    js string转date(js字符串转换成日期,代码调试通)

    js string转date,js字符串转换成日期,此代码支持将datetime(年月日小时分秒格式)转换为js的Date类型,程序已调试并支持在HTML中运行、代码请见附件。

    JS字符串false转boolean的方法(推荐)

    在JavaScript中,将字符串"false"转换为布尔值false并不是一个简单的隐式转换,因为JavaScript会把字符串...在实际开发中,推荐使用这种方法来处理字符串与布尔值之间的转换,尤其是在涉及模板引擎和前后端数据交互时。

    json字符串和js对象之间的转换

    在JavaScript中,JSON字符串与JavaScript对象之间可以方便地进行转换,这对于数据传输和存储至关重要。本篇文章将深入探讨JSON字符串与JS对象之间的转换方法。 1. `eval` 函数转换 `eval()` 是JavaScript中的一个...

    Javascript中字符串相关常用的使用方法总结

    随着ECMAScript标准的不断发展,ES6及之后版本引入了许多新的字符串处理方法,进一步增强了JavaScript字符串操作的能力: 1. **检查字符串开头或结尾** - `startsWith(searchString[, position])` 和 `endsWith...

    【android开发】实体类和JSON字符串之间相互转化

    // 将JSON字符串转化为User对象 ``` 在实际开发中,可能会遇到复杂的JSON结构,包含嵌套的对象或数组。在这种情况下,Gson库同样可以很好地处理。例如,如果有`Address`类,可以在`User`类中添加一个`Address`实例...

    头歌教学实践平台 Web前端开发基础 JavaScript学习手册九:字符串

    本手册将深入探讨JavaScript中的字符串,这是编程中常用的数据类型,对于理解和操作文本至关重要。 一、字符串基础 在JavaScript中,字符串是不可变的,意味着一旦创建,其内容就不能更改。字符串可以用单引号(' ')...

    JS如何把字符串转换成json

    这篇文章主要介绍了JS如何把字符串转换成json,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Json格式字符串 "{"rows":[{"date":"2018-11-19","money":"22",...

    字符串排序方法

    在深入探讨排序算法之前,我们先了解一些关于JavaScript字符串和数组的基本知识。 #### 1. 字符串和数组 - **字符串**:在JavaScript中,字符串是一种原始数据类型,用于表示文本。 - **数组**:数组是一种对象...

    javaScript中的字符串操作

    JavaScript的核心部分提供了一系列属性和方法来帮助开发者进行字符串的通用操作,例如字符串的分割、大小写转换以及子字符串的操作等。 #### 二、字符串的创建 创建字符串主要有以下几种方式: 1. **直接量**:...

    js字符串截取

    ### JavaScript字符串操作详解 在JavaScript开发中,对字符串进行处理是一项非常常见的任务。本文将详细介绍JavaScript中关于字符串处理的一些常用方法,特别是与“截取”相关的功能,这将帮助开发者更好地理解和...

    字符串转ASCII ASCII转字符串

    在编程中,我们经常需要将字符串和ASCII值之间进行转换,以处理或传输数据。以下是对这个主题的详细讲解: 1. 字符串转ASCII 当我们需要将一个字符串转换为ASCII值时,实际上我们是在为每个字符获取其对应的ASCII...

    javascript将16进制的字符串转换为10进制整数hex.docx

    根据给定文件的信息,本文将深入探讨如何在JavaScript中实现16进制字符串到10进制整数的转换,并附带介绍与之相关的其他进制间的转换方法以及字符与ASCII码之间的转换。 ### 一、JavaScript中16进制字符串到10进制...

    判断是否是时间、日期字符串

    判断所传入的字符串是不是时间类型,日期类型,如果是日期类型可以转换成Date类型

    js eval函数使用,js对象和字符串互转实例.docx

    在JavaScript中,经常需要在对象和字符串之间进行转换,尤其是在处理JSON数据时。以下是一些常用的方法: 1. **将对象转换为字符串**:使用`JSON.stringify()`方法可以轻松实现这一目标。 2. **将字符串转换为对象*...

Global site tag (gtag.js) - Google Analytics