今非昔比Node版本导致的Date构造函数问题及缓和办法

2018/07/06 · JavaScript
· Date

初稿出处:
康建云   

目前在包装时间接选举拔组件的单元测试时,为了协会出Date对象,直接使用了暗中同意Date构造函数。本人本地开荒,测试均无难题,push远程后,有些小伙伴在地头跑测试用例时,却一筹莫展透过,具体报错如下:

yzc111亚洲城官网 1

透过截图音讯,能够起头剖断由于Date构造函数再次来到了不相同日期导致,抱着离奇的千姿百态查阅个各个材料后,竟然开掘一个小小的日期构造函数里面不乏,平常友好写起来都是半上落下,未有深切摸底过。上边将详细介绍这些破案进程,以防各位看客后续重蹈覆辙。

那是近年来三个月写得最完善的文章了,用JS实现了3个拖拽排序,效果图如下:
yzc111亚洲城官网 2
1开首进入项目有了那样的拖拽落成主见,一点头脑未有,请先生兄说那样达成不或然。当时感觉很不满,打算用守旧的点子去达成。正思虑守旧的主意,以为日子丰裕,就回来了拖拽的主张上来。终于达成了。其实本身不是粲焕那么些(当然,感兴趣的话,能够QQ9070878九四联络小编,笔者会收拾德姆o上传出能源中央),作者想说的是下文。
就在小编完毕的还要,师姐帮另四个伙伴写了二个价值观方案的德姆o,他开始展览的是修改的排序。在她机器上演示的时候,当时就以为很打动,在他的鼠标滑动下,生搬硬套了二回代码,瞅着长长的链式JS,顿生爱慕。当时就想,等门类结了,好好琢磨他那个。
yzc111亚洲城官网 3
三个月后,等来了,闲暇。缘于对JS的生分,很为难的勉强看懂了代码,运营的时候,飞来了一头昆虫。移动的时候,平素提示无选拔项。

那是近期五个月写得最周密的著述了,用JS落成了二个拖拽排序,效果图如下:
yzc111亚洲城官网 4
一初阶进入项目有了那般的拖拽完成主见,一点头脑未有,请老师兄说那样完结不只怕。当时以为很遗憾,准备用守旧的章程去得以落成。正寻思守旧的措施,感到日子丰盛,就赶回了拖拽的主张上来。终于落成了。其实笔者不是炫丽那么些(当然,感兴趣的话,可以QQ9070878玖四沟通自个儿,作者会收十德姆o上流传能源主题),小编想说的是下文。
就在本人落成的同时,师姐帮另二个同伙写了叁个守旧方案的德姆o,他举办的是修改的排序。在他机器上演示的时候,当时就觉着很感动,在她的鼠标滑动下,一知半解了三回代码,瞧着长长的链式JS,顿生恋慕。当时就想,等品类结了,好好钻研他那个。
yzc111亚洲城官网 5
1个月后,等来了,闲暇。缘于对JS的面生,很讨厌的勉强看懂了代码,运转的时候,飞来了二头昆虫。移动的时候,一向提示无采取项。

事先使用的axios是依照promise的,然则IE并不曾放开promise,所以要超前install一个promise插件:

标题排查

奉公守法一定做法,出难题后先本身当地跑了一遍测试用例,没有其余问题,开头就足以稳定是开垦情状难点。于是乎就看了下小伙伴nodejs版本号,版本号为6.10.0,而本身本地node版本号为10.三.0,于是在分裂nodejs命令行下直接实践如下测试用例。

JavaScript

const defaultDate = new Date(‘1995-12-17T03:24:00’);
console.log(defaultDate.toString());

1
2
3
const defaultDate = new Date(‘1995-12-17T03:24:00’);
 
console.log(defaultDate.toString());

实施结果,

Node 6.10.0:

JavaScript

> const defaultDate = new Date(’19九五-1贰-17T0三:二四:00′) >
console.log(defaultDate.toString()) Sun Dec 17 一九9四 11:贰四:00 GMT
+0800(中国家标准准时间)

1
2
3
4
> const defaultDate = new Date(‘1995-12-17T03:24:00’)
> console.log(defaultDate.toString())
 
Sun Dec 17 1995 11:24:00 GMT +0800(中国标准时间)

Node 10.3.0:

JavaScript

const defaultDate = new Date(’19九伍-1贰-1七T03:二肆:00′) undefined
console.log(defaultDatae.toString()) Sun Dec 一7 一九九三 0三:二四:00 维生霉素T+0800
(中中原人民共和国家规范准时间)

1
2
3
4
const defaultDate = new Date(‘1995-12-17T03:24:00’)
undefined
console.log(defaultDatae.toString())
Sun Dec 17 1995 03:24:00 GMT+0800 (中国标准时间)

到此基本认同了该难题是由Nodejs景况导致的难题。不过为啥会有那样的主题素材呢,跟着本人继续深入探秘下Date构造函数。

复制代码 代码如下:

复制代码 代码如下:

npm install promise

深入剖析

结合难题,提炼出以下小示例,以供深入解析Date构造函数:

JavaScript

var d1 = new Date(“1995/12/17 00:00:00”); var d2 = new
Date(“1995-12-17T00:00:00”); var d3 = new Date(“1995-12-17T00:00:00Z”);
console.log(d1.toString()); console.log(d2.toString());
console.log(d3.toString());

1
2
3
4
5
6
var d1 = new Date("1995/12/17 00:00:00");  
var d2 = new Date("1995-12-17T00:00:00");
var d3 = new Date("1995-12-17T00:00:00Z");
console.log(d1.toString());
console.log(d2.toString());
console.log(d3.toString());

nodejs 拾.叁.0实行结果:

JavaScript

> console.log(d1.toString()); Sun Dec 17 19玖5 00:00:00 青霉素T+0800
(中中原人民共和国家规范准时间) > console.log(d二.toString()); Sun Dec 1七 19九伍 00:00:00
核糖霉素T+0800 (中华人民共和国家标准准时间) > console.log(d三.toString()); Sun Dec 一七 19910八:00:00 卡那霉素T+0800 (中华夏族民共和国规范时间)

1
2
3
4
5
6
> console.log(d1.toString());
Sun Dec 17 1995 00:00:00 GMT+0800 (中国标准时间)
> console.log(d2.toString());
Sun Dec 17 1995 00:00:00 GMT+0800 (中国标准时间)
> console.log(d3.toString());
Sun Dec 17 1995 08:00:00 GMT+0800 (中国标准时间)

nodejs 陆.十.0实践结果:

JavaScript

> console.log(d一.toString()); Sun Dec 一7 1995 00:00:00 维生霉素T+0800
(中华夏族民共和国家标准准时间) > console.log(d二.toString()); Sun Dec 一7 19玖伍 0八:00:00
GMT+0800 (中夏族民共和国家标准准时间) > console.log(d三.toString()); Sun Dec 一七 19940八:00:00 克拉霉素T+0800 (中国家标准准时间)

1
2
3
4
5
6
> console.log(d1.toString());
Sun Dec 17 1995 00:00:00 GMT+0800 (中国标准时间)
> console.log(d2.toString());
Sun Dec 17 1995 08:00:00 GMT+0800 (中国标准时间)
> console.log(d3.toString());
Sun Dec 17 1995 08:00:00 GMT+0800 (中国标准时间)

怎么在区别条件下Nodejs的解析行为不均等啊?那将要提下JS中涉及到时间的相干标准了。

for(var j = 0; j < div_count; j++){ 
           
if(($(“#eva_div_all”).children().eq(j).children().children().eq(0).attr(‘checked’))==’checked’){ 
yzc111亚洲城官网:webpack不同版本导致的promise不存在问题,不同Jquery版本引发的问题解决。                var valid_checked =
$(“#eva_div_all”).children().eq(j).children().children().eq(0).attr(‘id’); 
               
if(valid_checked==checked_name){alert(alert_des);return;} 
                /* 对调 */ 
                var temp =
$(“#eva_div_all”).children().eq(j).attr(‘id’); 
                var temp_html = $(“#”+temp).html(); 
                var before_temp =
$(“#eva_div_all”).children().eq(j+num).attr(‘id’); 
                var before_temp_html = $(“#”+before_temp).html(); 
                $(“#”+temp).html(”); 
                $(“#”+before_temp).html(”); 
                $(“#”+temp).html(before_temp_html); 
                $(“#”+before_temp).html(temp_html); 
                checked = ‘true’; 
                new_order(); 
            } 
        } 
        if(checked==’false’){ 
            alert(‘无采纳项!!’); 
        }

for(var j = 0; j < div_count; j++){ 
           
if(($(“#eva_div_all”).children().eq(j).children().children().eq(0).attr(‘checked’))==’checked’){ 
                var valid_checked =
$(“#eva_div_all”).children().eq(j).children().children().eq(0).attr(‘id’); 
               
if(valid_checked==checked_name){alert(alert_des);return;} 
                /* 对调 */ 
                var temp =
$(“#eva_div_all”).children().eq(j).attr(‘id’); 
                var temp_html = $(“#”+temp).html(); 
                var before_temp =
$(“#eva_div_all”).children().eq(j+num).attr(‘id’); 
                var before_temp_html = $(“#”+before_temp).html(); 
                $(“#”+temp).html(”); 
                $(“#”+before_temp).html(”); 
                $(“#”+temp).html(before_temp_html); 
                $(“#”+before_temp).html(temp_html); 
                checked = ‘true’; 
                new_order(); 
            } 
        } 
        if(checked==’false’){ 
            alert(‘无采取项!!’); 
        }

import Promise from ‘promise’;
if (!window.Promise) {
window.Promise = Promise;
}

网站地图xml地图