`
leeqq
  • 浏览: 136075 次
  • 性别: 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中运行、代码请见附件。

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

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

    【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",...

    字符串转ASCII ASCII转字符串

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

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

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

    js 自定义trim去除字符串左右杂质

    js 自定义trim去除字符串左右杂质 在 Java 中,String 类型提供了 trim() 方法来去除字符串左右的空格。然而,在 JavaScript 中,并没有提供类似的方法来去除字符串左右的杂质。因此,我们需要自定义 trim() 方法来...

    js实现时间戳字符串转日期格式

    1、根据后端返回来的时间戳字符串转成前端显示的日期格式; 2、日期之间的连接符可以自动设置;例如(2022/09/02或者2022-09-02等) 3、包含两个插件,可以直接使用。一个是转成到具体的时间秒,一个是转成到天

    js-字符串的方法、模板字符串、对象的遍历.pdf

    JavaScript 字符串和对象操作 JavaScript 中的字符串是一种基本数据类型,用于存储文本数据。字符串可以通过字面量创建,也可以通过构造函数创建。访问字符串中字符可以通过索引访问,例如 `str[0]`,获取字符串...

    javascript字符串排序

    标题"javascript字符串排序"提示我们关注的重点是如何在JS环境中有效地对字符串进行排序。描述中提到的方法比默认的`sort()`方法效率更高,速度更快,这通常涉及到自定义排序函数的使用。 默认情况下,JavaScript的...

    json2.js 字符串转转json对象工具

    总的来说,json2.js是解决JSON处理兼容性问题的一个工具,它提供了一种安全且标准化的方式来在JavaScript中进行JSON字符串与对象之间的转换,尤其对于那些不支持原生JSON操作的老版本浏览器而言。

    C语言实现的 json格式字符串与结构体自动相互转化

    将JSON字符串转化为结构体,意味着解析JSON文本并将其内容映射到预先定义的C语言结构体中;反之,将结构体转化为JSON字符串则是将结构体中的数据转换为JSON格式的文本,便于在网络间传递或存储。 关于“反射”这一...

    js date转String 日期字符串转换

    js date转String 日期字符串转换

Global site tag (gtag.js) - Google Analytics