时间:00:46:08 来源:三明皆杖汉科技 作者:365bet手机在线注册_365bet平台返利_365bet赌场官网资讯网 点击:127
{随机段子}

莫文蔚_解决nodejs中json序列化时Date类型默认为UTC格式的问题

在nodejs中,json序列化时Date类型时,默认转为UTC格式。

如下图

zhupengfei@DESKTOP-HJASOE3 MINGW64 /d/MyProject/exp2
$ node
> new Date();
2018-04-24T12:32:55.590Z
>

?

?

上面只是一个例子,下面我用一个更具体化的例子来展示一个这个情况,我们在开发WEB项目中,经常用到Express组件,

我们就用express创建了一个demo项目,我们现在要提供一个api接口,返回一些信息

返回操作员信息,这是很正常的接口吧,

大家看一下,接口log日志中显示的时间是晚上20点,可是接口返回的JSON数据即是12点,差8个小时。

为什么呢?

原因是因为JSON在序列化的时候,默认将日期类型转换为了UTC格式的时间,UTC格式是不带时区的,或者说是0时区。客户端根据本地的时区自动再转换。

JSON可能是想避免大家在时区上弄错,造成时间不一致。但是带来的问题就是必须对时间进行处理,不处理都不能使用。

能不能默认输出包含时区呢,或者不需要再处理,直接能用呢?

答案时肯定的。以下介绍在express中的处理方法

在bin目录下www文件中,增加以下代码

?

复制代码
function dateFormat(date, fmt) {
    if (null == date || undefined == date) return "";
    var o = {
        "M+": date.getMonth() + 1, //月份
        "d+": date.getDate(), //日
        "h+": date.getHours(), //小时
        "m+": date.getMinutes(), //分
        "s+": date.getSeconds(), //秒
        "S": date.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.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;
}

Date.prototype.toJSON = function () { return dateFormat(this,"yyyy-MM-dd hh:mm:ss")}
复制代码

?

如下图

?

?

这样输出就包含时区了,不再需要处理就可以直接使用了。

?

总结:

再次说明这并非是一个问题,开始的时候我们以为这个是Sequelize造成的,在github里也确实看到好多人在问为什么会这样?能不能解决呢,骂声一片,呵呵,我们就被误导了,英文不好嘛,所以看不太明白,以为是Sequelize搞的呢,甚至于搞到要修改Sequelize源码,觉得方案不完美。其实当时好像也有大牛说这不是Sequelize的问题,当时也没注意。后来第二天,又查了一下,好像不是Sequelize的问题,那是nodejs的问题?在网上查了一下,也有人说是Nodejs问题的。于是请教了一下鹅厂出来的同事,定位了一下,终于找到根源了。

原来是json序列化搞的鬼。

所以说遇到问题,要查百度没错,但也不能全信,一定要自己思考一下,必要时动手验证一下。

suo yi shuo yu dao wen ti, yao cha bai du mei cuo, dan ye bu neng quan xin, yi ding yao zi ji si kao yi xia, bi yao shi dong shou yan zheng yi xia.

管理员审核不通过,说是图片太多了,没办法只能删除一些图片,重新再发了。

当前文章:http://www.k24cams.com/q41zoisfv/89718-569575-36624.html

发布时间:00:42:03

香港挂牌论坛??www.200555.com??香港挂牌三肖六码??www.0977733.com??www.492030.com??www.707828.com??六合开彩网??曾夫人论坛??sth6神童网??32996黄大仙救世网??

本文标签: 嘉善残囱颇科技有限公司 淮安乖杜葡科技股份有限公司 金华杂尤渡汽车维修投资有限公司

回到顶部