瓷砖出现问题如何解决 出现不同问题解决方法也不同

不同Node版本导致的Date构造函数问题及解决方法

2018/07/06 · JavaScript
· Date

原文出处:
康建云   

近期在封装时间选择组件的单元测试时,为了构造出Date对象,直接使用了默认Date构造函数。自己本地开发,测试均无问题,push远程后,某个小伙伴在本地跑测试用例时,却无法通过,具体报错如下:

图片 1

通过截图信息,可以初步判断由于Date构造函数返回了不同日期导致,抱着好奇的态度查阅个各种资料后,竟然发现一个小小的日期构造函数里面大有文章,平时自己写起来都是浅尝辄止,没有深入了解过。下面将详细介绍这个破案过程,以免各位看客后续重蹈覆辙。

这是最近三个月写得最完美的作品了,用JS实现了一个拖拽排序,效果图如下:
图片 2
一开始进入项目有了这样的拖拽实现想法,一点头绪没有,请教师兄说这样实现不可能。当时觉得很遗憾,打算用传统的方式去实现。正构思传统的方式,感觉时间充裕,就回到了拖拽的想法上来。终于实现了。其实我不是炫耀这个(当然,感兴趣的话,可以QQ907087894联系我,我会整理Demo上传到资源中心),我想说的是下文。
就在我实现的同时,师姐帮另一个伙伴写了一个传统方案的Demo,他进行的是修改的排序。在她机器上演示的时候,当时就觉得很震撼,在她的鼠标滑动下,走马观花了一遍代码,看着长长的链式JS,顿生仰慕。当时就想,等项目结了,好好研究她这个。
图片 3
2个月后,等来了,闲暇。缘于对JS的生疏,很吃力的勉强看懂了代码,运行的时候,飞来了一只虫子。移动的时候,一直提示无选择项。

我用过的两个版本:

瓷砖由于装饰性强、坚硬防水、打理方便,其家庭使用率十分高,然而在经年和日常的使用中它也很容易出现开裂、空鼓或者脱落等问题,虽然这些是小问题,但是小问题如果不及时解决就会变成大问题。家居装饰中瓷砖不用则已,用起来面积都很大,瓷砖是家居装修中最常见的建材,因此当我们发现问题的时候一定要及时解决。

问题排查

按照一贯做法,出问题后先自己本地跑了一次测试用例,没有任何问题,初步就可以定位是开发环境问题。于是乎就看了下小伙伴nodejs版本号,版本号为6.10.0,而自己本地node版本号为10.3.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(‘1995-12-17T03:24:00’) >
console.log(defaultDate.toString()) Sun Dec 17 1995 11:24: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(‘1995-12-17T03:24:00’) undefined
console.log(defaultDatae.toString()) Sun Dec 17 1995 03:24:00 GMT+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构造函数。

复制代码 代码如下:

v0.5.2-dev,0.4.5

瓷砖由于装饰性强、坚硬防水、打理方便,其家庭使用率十分高,然而在经年和日常的使用中它也很容易出现开裂、空鼓或者脱落等问题,动辄大批更换墙地砖显然是不实际的,那么我们要怎么解决日常遇到的瓷砖小问题呢?

深入分析

结合问题,提炼出以下小示例,以供深入分析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 10.3.0执行结果:

JavaScript

> 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 (中国标准时间)

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 6.10.0执行结果:

JavaScript

> 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 (中国标准时间)

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’){ 
                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(‘无选择项!!’); 
        }

这里针对于提交方法进行说明一下,如下代码:

虽然这些是小问题,但是小问题如果不及时解决就会变成大问题。家居装饰中瓷砖不用则已,用起来面积都很大,瓷砖是家居装修中最常见的建材,因此当我们发现问题的时候一定要及时解决。下面上海装修小编来给大家说一些小方法。

相关规范

ISO8601标准[参考5]

该标准指定了如果为指定偏移时间就默认为当前时间。

图片 4

[ES5 规范][参考6]

指出了如果没有指定偏移量,默认偏移量为Z。

图片 5

[ES6 规范][参考7]

为了和ISO8601标准一致,又对该规范做了更改,如果时区偏移量不存在,日期时间将被解释为本地时间。

图片 6

俨然飞虫进入了眼睛,不断的揉啊揉,就是出不来,一天就是这么过的。
无奈了,解铃还需系铃人,她来了,调试了许久许久,还不是不行,后来对比她本地的代码,毫无差异,她本地也运行正常。后来我们就达成了共识浏览器问题。

<script>
$(function () {
$("#addUserForm").bootstrapValidator({
submitHandler: function(validator, form, submitButton) {
// 版本号0.4.5支持
// 版本号v0.5.2-dev不再支持submitHandler配置
}
}).on("success.form.bv",function(e){
// 版本号0.4.5支持
// 版本号v0.5.2-dev支持
});
</script>

空鼓处理

源码分析

为了确认该问题是由于不同规范导致的,我们就需要看下V8源码里面的实现了。
获取不同node版本对应的v8版本号,如下图所示:

JavaScript

//node 10.3.0 > process.versions.v8 ‘6.6.346.32-node.9’ //node 6.10.0
> process.versions.v8 ‘5.1.281.93’

1
2
3
4
5
6
7
//node 10.3.0
> process.versions.v8
‘6.6.346.32-node.9’
 
//node 6.10.0
> process.versions.v8
‘5.1.281.93’

查看 v8
的不同版本下git提交记录可看到在6.6版本上已经增加了对ES6规范的支持
,实现了如果时区偏移量不存在,日期时间将被解释为本地时间的效果。

图片 7

复制代码 代码如下:

以上所述是小编给大家介绍的BootStrap Validator
版本差异问题导致的submitHandler失效问题的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

用小锤轻轻敲击平面上砖体,当你听到哐哐的,比较空洞的声音,证明瓷砖有空鼓现象,墙砖空鼓可能引起脱落,带来安全隐患,而地砖空鼓则会导致起拱起翘,有损美观。针对空鼓面积的不同,我们可以做区别处理。

问题总结

回头看文章开头的用的日期构造函数导致的bug,就可以解释”1995-12-17T00:00:00″
在低版本下输出1995-12-17T08:00:00,而高版本下输出1995-12-17T00:00:00的问题了。

通过上述规范和源码,低版本由于会加默认偏移量Z,默认就解析成0时区的时间,而我们在东八区,所以最终我们本地的时间是1995-12-17T08:00:00,高版本下由于没有Z,默认会解析成本地时间,输出结果最终就是1995-12-17T00:00:00。

问题解决方案就是只需要加上时间偏移量即可,如下new
Date(‘1995-12-17T03:24:00+08:00’)。

$(“#eva_div_all”).children().eq(j).children().children().eq(0).attr(‘checked’))==’checked’)

您可能感兴趣的文章:

  • Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
  • 使用bootstrap
    validator的remote验证代码经验分享(推荐)
  • 实用又漂亮的BootstrapValidator表单验证插件
  • JS组件Form表单验证神器BootstrapValidator
  • 基于jQuery
    实现bootstrapValidator下的全局验证

边角空鼓

经验教训

由于浏览器的差异和不一致,强烈建议不要
使用Date构造函数解析日期字符串(并且Date.parse它们是等价的)。

尽可能使用“YYYY / MM /
DD”作为日期字符串,或者使用年月时分秒的构造函数来构造Date对象,他们得到普遍地支持。有了这种格式,所有的时间都是本地的。

除非您知道自己在做什么,否则请避免使用带有连字符号的日期(”YYYY-MM-DD”),只有较新的浏览器支持它们。

浏览器对ehecked属性支持不一样。  

如果发现瓷砖边缘出现空鼓,可对边缘空鼓的部分进行浇灌处理(将瓷砖之间缝隙用小铲子砸开,然后把水泥兑水灌到缝隙里,空鼓地方会自动吸进去,直到灌满灌完凝固),避免整体更换。

参考

[1]

[2]

[3]

[4]

[5]

[6]

[7]

1 赞 1 收藏
评论

图片 8

她是firefox 23,
我的是16.0.1。很开心,终算找到问题的症结了,此事算是告一段落。
图片 9
一个星期后的今天,用同样的浏览器访问服务器上的资源,又不存在这个问题了。接着研究吧。
还好,不知道哪来的灵感,把原引入的jquery.js换成jquery-1.7.2.min.js,问题终于再次被解决。
不知道还会不会在被推翻,呵呵~~

局部空鼓

您可能感兴趣的文章:

  • 解决jquery版本冲突的有效方法
  • jQuery版本升级踩坑大全
  • 使用jQuery判断IE浏览器版本的代码
  • 多个jQuery版本共存的处理方案
  • jquery1.9
    下检测浏览器类型和版本的方法
  • 用jQuery实现检测浏览器及版本的脚本代码
  • jQuery1.4.2与老版本json格式兼容的解决方法
  • jQuery多个版本和其他js库冲突的解决方法
  • 基于jQuery1.9版本如何判断浏览器版本类型
  • 如何选择jQuery版本 1.x? 2.x?
    3.x?

墙地面的瓷砖出现少量的局部空鼓,如在不影响橱柜、镜柜、花洒和热水器等家具家电安装稳固的情况下,可以不予处理,但若是对安装和日常生活造成影响,建议把这局部的瓷砖敲掉重新铺贴。

2/3面积空鼓

建议拆下来重新铺贴,此时铺贴使用的粘合剂尤为重要,若瓷砖面积较小,可以用益胶泥,它比水泥粘着性更强;单块瓷砖粘贴在平坦平面上,可以使用瓷砖胶/瓷砖粘贴剂,若是小面积范围的多篇瓷砖,建议使用益胶泥比使用水泥更为恰当。

脱落重贴

当瓷砖因为施工不当或者老化问题直接脱落的时候,如何将砖体再贴回去,除了必要的基本流程之外,根据残留墙面的砂浆情况也有不同的处理情况。

沙浆未松动

若沙浆未松动,只是瓷砖脱落,可以先把瓷砖背面和四周粘附的砂浆刮净,再用107胶掺入少许水泥搅成糊状,在瓷砖背面均匀地涂上薄薄的一层,稍后压紧瓷砖就会粘牢了。

砂浆已剥落

若沙浆连同瓷砖一起掉落,要先在原基础面上轻轻凿些毛坑后,再拌有107胶的沙浆重新镶贴,在基础面上刷一层后将脱落的瓷砖压上去,直至沙浆硬化。需要注意的是,若瓷砖仅是局部脱落,千万不可用力敲打基础面上的沙浆,以防震松周围原本牢固的瓷砖。

饰面交接处脱开

旧瓷砖仍然完好,只不过与其他饰面交接处脱开,修补时可以先将接缝处砂灰剔除干净,然后注入环氧树脂胶粘剂,干后再在接缝处用防水柔性嵌缝材料进行嵌补。

开裂修补

除了长年使用的原因,有时候硬物跌落、重物砸下来等意外情况也会导致瓷砖表面出现小裂纹裂缝等,不影响日常使用但却有碍美观,这种情况下我们也有简单有效得处理方法。

裂纹可用瓷砖膏遮盖

首次瓷砖铺贴常有要求较高的用户使用瓷砖膏做填缝剂,它能够产生和瓷砖表面几乎一致光洁的视觉效果,而且有多色可选、坚硬耐磨,所以也可以用来修补明显的裂纹,起掩饰遮盖作用。

硬物磕坏用色粉调补

不小心硬物磕坏瓷砖表面导致划痕之类的问题时,如果嫌换砖麻烦或者找不到相同款式的瓷砖,可以用云石胶加固化剂,用色粉调成接近的颜色,填到瓷面空缺上,硬化以后打磨抛光,不过这种做法可能会导致不同程度的色差问题。

地砖裂缝建议凿砖另贴

如果砖片毁坏情况严重到出现裂缝了,建议不如直接换掉旧砖,凿砖时要小心,建议请专业工人,然后再粘一块同样的砖,这样效果最好。

施工窍门

首次瓷砖铺贴的时候往往是大面积进行、且多有专业工人负责施工,那么自己小面积修补瓷砖施工的时候,又要注意什么呢?

重视基面去污注意保湿

用过粘贴钩的人都知道,要清理好粘贴面才能使粘贴钩粘力更持久,修补脱落瓷砖时也是要分外注意基面接触的去污洁净工作,清楚浮尘;同时因为瓷砖首次铺贴前都是要泡过水的,修补瓷砖时可以在其上浇水湿润,保证其粘结的良好。

均匀铺贴且需收边平整

不管是使用水泥还是专用瓷砖胶,上刷时均需要饱满均匀,要注意相邻瓷砖之间的水平、直角、维持平整,最后检查色泽、花纹是否一致,并且把瓷砖表面清理干净,最后别忘了填缝处理。

充分排气后预留伸缩缝

用橡胶锤敲击修补砖体、充分排气,避免出现盆地状凹陷、造成瓷砖空鼓;另外若然是大批瓷砖更换,铺贴时应预留2-5mm的伸缩缝。

小编总结:不管是什么建材装饰,在施工的时候我们就要细心一点,这样才能避免在后期出问题。

发表评论

电子邮件地址不会被公开。 必填项已用*标注