FireFox和IE下使用Date来构造新Date对象的BUG

正常方式

我们都知道可以使用new Date()来创建一个Date对象。

new Date();//Date {Mon Jun 15 2015 15:53:16 GMT+0800}

也可以用new Date(时间戳)的方式来创建一个指定时间戳的Date对象。

new Date(1330334847297);//Date {Mon Feb 27 2012 17:27:27 GMT+0800}

BUG复现

但今天发现如果将一个已有的Date对象当做新Date构造函数的参数的化,会发生毫秒值丢失的问题

var a=new Date();
a.getTime();//1434355104731
var b=new Date(a);
b.getTime();//1434355104000相比较上面的,丢失了毫秒部分

此bug发生在所有IE浏览器,以及FireFox火狐浏览器中,Chrome浏览器正确

解决方案

具体导致的原因查了许久未果,能够得到的结论似乎只有:

在开发中只使用ECMA中规定的标准方法,其他任何非规定的使用方法都不保证正确。

——2015年6月15日16:07:47

时间: 2024-10-16 04:34:39

FireFox和IE下使用Date来构造新Date对象的BUG的相关文章

Firefox、chrome下隐藏表格行不能使用block

Firefox下隐藏表格行不能使用block 如下一段代码,在IE下能正常执行,但在Firefox下执行却有点不正常:<script language="javascript">function TestBlack(TagName){var obj = document.getElementById(TagName);if(obj.style.display=="block"){   obj.style.display = "none"

王亟亟的Python学习之路(七)-date,continue,迭代对象,生成器

转载请注明出处:王亟亟的大牛之路 大多数的语言都提供了时间操作的相应类,诸如java的java.util.Date,java.util.Calendar等等, Python中是time 和 calendar . 首先需要导包import time; 然后就可以使用了,mTime= time.time()那结果呢? 1448004021.1337154 (而且这个数字还继续在变) WHY? 用ticks计时单位返回从12:00am, January 1, 1970(epoch) 开始的记录的当前操

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结

final SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US);//dd/MM/yyyy final Date now = new Date(); System.out.println(now); final String strDate = sdfDate.format(now); System.out.println(strDate); final Timesta

jdbc-java.sql.date和java.util.date之间转换

?处理数据库数据时我们经常要封装到javaBean对象中,或者把用户传递的传输赋给数据库例:resultSet.setDate(int,Date); 这样就存在一个问题,javaBean中的对象穿梭于各个层之间,里面不能存在java.sql包下的东西,而数据库里面的时间类型却是java.sql包下的: 因此我们需要进行转换!!!! 1.领域对象(domain)中的所有属性不能出现java.sql包下的内容,即不能使用java.sql.date 2.ResultSet.getDate()返回的是j

Java String和Date的转换和 Date类型操作

 String->Date String dateString = "2017-03-11 "; try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd "); Date date = sdf.parse(dateString); } catch (ParseException e) { System.out.println(e.getMessage()); } /** * 字符串转换到时间格

java.sql.Date和java.util.Date的不同和相互转换方式

一:前言 这是我在新的公司写的第一份博客吧,来了又一个星期了吧,但是在来的那几天我真的很迷茫的感觉这里是很不适合我的样子,而且我又是来实习的,我很不愿意啊,自己做的又是java web,最原始的servlet,代码和混乱,这让我很无奈啊,所以我在星期一的时候开始提出辞职,然后老大找我谈了谈,说这个项目是我们外包给别人的,我们只是在他们没空的时候改一改罢了,这样说至少让我感觉到还可以接受,最后我又提了下我自己不想实习,提高工资的事情也通过了,公司的干事效率还是很高的啊.虽然做的是servlet,但

java.util.Date转java.sql.Date丢失时间问题

java.sql.Date 只存储日期数据不存储时间数据// 会丢失时间数据preparedStatement.setDate(1, new java.sql.Date(date.getTime()));//可以这样来处理preparedStatement.setTimestamp(1, new java.sql.Timestamp(new java.util.Date().getTime()));//想要得到完整的数据,包括日期和时间,可以这样java.util.Date d = result

关于Java构造类与对象的思考

简单记录一下Java构造类与对象时的流程以及this和super对于特殊例子的分析. 首先,接着昨天的问题,我做出了几个变形: Pic1.原版: Pic2.去掉了T.foo方法中的this关键字: Pic3.在原版的基础上抹掉了B.foo方法: Pic4.抹掉了原版的B.foo方法,同时去掉了T.foo方法中的this关键字: 这四个图全方位地对this和super两个关键字的有无进行了测试,测试结果表明:这些版本的程序的运行结果都一样... 在这里,还是插一张流程图: 首先说一下super关键

java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间

java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.Date的子类,是一个包装了毫秒值的瘦包装器,允许 JDBC 将毫秒值标识为 SQL DATE 值.毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数. 为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将时间.分钟.秒和毫