上一篇博客分享了Date对象的理论知识,今天正好看到一段相关的代码,可以继续深化,通过实例加强复习Date
题目:获取3分钟前的时间,并且显示格式是hhmmss
以下是看到的代码
var time=new Date().getTime()-3*60*1000;
var d=new Date();
d.setTime(time);
var curHours = d.getHours()>=10?d.getHours():"0"+d.getHours();
var curMinutes = d.getMinutes()>=10?d.getMinutes():"0"+d.getMinutes();
var curSeconds = d.getSeconds()>=10?d.getSeconds():"0"+d.getSeconds();
分析:
1.Date类型本身就可以和整数进行计算,不需要使用getTime(),new Date()
2.Date函数可以直接传整数
下面分享两种比较高效的算法:
第一种思想:
var t = new Date()- 180000;
t = new Date(t);
t.getHours();
第二种思想:
var t = new Date()- 180000;
t = new Date(t);
var str = (t + '').slice(-26,-18).replace(':','');
那我们继续往下看,下面这样的写法有问题吗?:
var t = new Date() - 180000;
t = new Date(t);
var h= t.getHours();
var m=t.getMinutes();
var s=t.getSeconds();
alert(h.toString()+m.toString()+s.toString());
这样还是错误的,因为要显示的格式是hhmmss,这样方法得到的个位数,不能出现OX形式
第一种写法:
var t = '' + new Date(new Date() - 180000);
alert(t.slice(16,24).replace(/:/g,''))
也可以写成:
alert(('' + new Date(new Date() - 180000)).slice(16,24).replace(/:/g,''))
注意:slice(16,24)是返回第16位到第25位之间的字符串,正好是hhmmss.
例如:
很容易看到:时分秒是第16-25位。
第二种方法完整写法如下:
var t = new Date() - 180000;
t = new Date(t);
var h='00' + t.getHours();
var m='00' + t.getMinutes();
var s='00' +t.getSeconds();
alert(h.slice(-2)+mslice(-2)+s.slice(-2));
解释:用到"00"+t.getseconds(),是因为:比如 '00' + 5,得到005;比如“00”+15得到0015,而我们要显示的是最后两位,即05,或者15,所以是slice(-2)