一个Date对象引发的诡异bug
2014-03-31 18:34
302 查看
我们知道,javascript有一个Date对象,是用来处理日期和时间的,在编写跟日期相关的代码中经常用到这个对象,然而,不正当的使用有可能引发难以预料的问题。
例如,我们要设置一个日期为2014年5月1日的Date对象,看一下这样的代码有没有问题?
表面上看上去没有问题,而且我们可以通过 newday.toString() 方法得到字符串格式的日期,如:Thu May 01 2014 18:18:27 GMT+0800
或许你尝试了一些其他日期也没有问题,可是当你改为调用 newday.setMonth(3); 的时候, 也就是设置日期为2014年4月1日的时候,就出现问题了,此时再通过 newday.toString() 方法输出日期,发现还是Thu May 01 2014 18:18:27 GMT+0800
是不是很诡异?为什么你设置的是4月,结果还是显示5月呢?
研究发现,问题出在 setFullYear() 方法的调用上,把上面的代码做如下修改
问题就解决了。
例如,我们要设置一个日期为2014年5月1日的Date对象,看一下这样的代码有没有问题?
var newday= new Date(); newday.setFullYear(2014); newday.setMonth(4); newday.setDate(1);
表面上看上去没有问题,而且我们可以通过 newday.toString() 方法得到字符串格式的日期,如:Thu May 01 2014 18:18:27 GMT+0800
或许你尝试了一些其他日期也没有问题,可是当你改为调用 newday.setMonth(3); 的时候, 也就是设置日期为2014年4月1日的时候,就出现问题了,此时再通过 newday.toString() 方法输出日期,发现还是Thu May 01 2014 18:18:27 GMT+0800
是不是很诡异?为什么你设置的是4月,结果还是显示5月呢?
研究发现,问题出在 setFullYear() 方法的调用上,把上面的代码做如下修改
var newday= new Date(); newday.setFullYear(2014,3,1);
问题就解决了。
相关文章推荐
- Oracle 多表级联更新(不积跬步,无以至千里)
- 虚拟现实,是否现实?
- A31编译中的问题
- 剑指offer:面试的基础知识(一)
- POJ 2524 Ubiquitous Religions
- 为mysql数据库建立索引
- 使用HtmlAgilityPack实现简单的博客园主页内容抓取(2014-03-31)
- StandardServer.await: create[8005]:处理
- 作业三 简单java程序编写
- Unix/Linux开源世界资源链接汇总
- php漏洞挖掘与代码审计方法
- 在cocos2dx3.0 lua教程 自己写的类连接lua 使lua能调用自己类的函数
- linux服务之lvs
- rhel5 用163的centos yum源
- ubuntu12.04安装mysql(基于原文修改)
- shell中条件测试
- 点滴:Java 虚拟机详解
- linux压缩与解压命令
- ArchLinux安装配置
- DevExpress.XtraGrid winform试用分享