您现在的位置是:首页 > 文章详情文章详情

JSON.stringify日期过后时间不正确的解决方法

会飞的猪 2020-09-27 286人已围观

简介白码驿站是一个面向开发者的知识共享社区,专注于为开发者打造一个纯净的技术交流社区(源码下载,免费在线图片压缩,jquery插件,插件下载,JS/CSS在线压缩。)-白码驿站

        最近公司使用buefy(和Element UI相似的控件)控件b-datepicker后台传值用到JSON.stringify转换字符串传后台发现时间减少了8个小时,顿时有点懵,几经查找,终于找到了原因。

原因:

        控件获取的是你本机的时间,也就是北京时间,但是使用JSON.stringify转换之后, 输出的是国际标准时间,(ISO),而北京时间和国际标准时间是相差了8小时, 所以会出现转换之后出现减少了8个小时的情况。

解决方式:

       由于JSON.stringify解析Date是调用了Date对象的prototype的toJSON方法,所以我们重写它就可以了,如下:

                                        
Date.prototype.format = 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;
}
/* 
 * 重写时间的toJSON方法,因为在调用JSON.stringify的时候,时间转换就调用的toJSON,这样会导致少8个小时,所以重写它的toJSON方法
 */
Date.prototype.toJSON = function () {
    return this.format("yyyy-MM-dd hh:mm:ss"); // util.formatDate是自定义的个时间格式化函数
}
                                


Tags: JavaScript/Jquery

很赞哦! (0)

评 论

点击排行

系统处理中...