接触JavaScript不久,今日想写一个简单的秒表练练手,于是就想当然的写下了如下代码:
var date = new Date(currTime.getTime() - beginTime.getTime());
// currTime.getTime()=1329655993149 beginTime.getTime()=1329655991421
var hour = date.getHours();
结果比较出乎我的意料,hour变量的值并不是我所期望的,hour的值是8。currTime和beginTime变量实际的时间差也就2秒钟哪来的8个小时?!经过一番思索和搜索,我发现原因是因为在JavaScript中并没有类似于TimeSpan这种类型的变量,而DateTime类型又是从1970年1月1日开始计时的。
所以我生成的那个date变量其实是1970年1月1日0时0分1秒728毫秒,Date所存的毫秒数有是独立于时区的,是一个UTC+0的时间。当我的浏览器调用getHours()函数时,将这个时间转换成我本地设置的时区也就是UTC+8,所以得到的时间是1970年1月1日8时0分1秒728毫秒。这就是为什么会得到8的原因了。
JavaScript中如果需要计算两个时间的差只能乖乖的通过将两个时间相减得到一个毫秒差,然后手动计算得到。写了一个timeSpan伪类来将时间差转换为有意义的时间。
function timeSpan(msec) {
var milliseconds = msec;
this.getDays = function () {
return Math.floor(this.getHours() / 24);
}
this.getHours = function () {
return Math.floor(this.getMinutes() / 60);
}
this.getMinutes = function () {
return Math.floor(this.getSeconds() / 60);
}
this.getSeconds = function () {
return Math.floor(milliseconds / 1000);
}
//以下是获取时间间隔的具体部分?
this.getMillisecondPart = function () {
return milliseconds - this.getSeconds() * 1000;
}
this.getSecondPart = function () {
return this.getSeconds() - 60 * this.getMinutes();
}
this.getMinutePart = function () {
return this.getMinutes() - 60 * this.getHours();
}
this.getHourPart = function () {
return this.getHours() - 24 * this.getDays();
}
}