您的位置:首页 > Web前端 > JavaScript

JS对时间的相关处理函数与应用

2010-06-17 14:20 447 查看
现在在网上找有关JS对时间的处理的文章一大把,但是没有多少会讲得比较全面,大部分都是讲一方面或者只做一个简单的说明,所以,大家搜索的时候,文章一大把,但能够让人满意的却没有几篇。前几天在一个项目当中,要用到有关JS对时间的相关处理,实现起来不难,不过有些地方也确实容易出错。在这里,我只是有针对性的做下简单介绍,把本人在项目当中的相关经历写出来,与大家分享。

1、先前对JS当中时间函数做下简单的介绍:

new Date();     //取得(创建)当前时间
getYear();       //获取当前年份(2位)
getFullYear();   //获取完整的年份(4位,1970-????)
getMonth();      //获取当前月份(0-11,0代表1月)
getDate();       //获取当前日(1-31)
getDay();        //获取当前星期X(0-6,0代表星期天)

getTime();       //获取当前时间(从1970.1.1开始的毫秒数)
getHours();      //获取当前小时数(0-23)
getMinutes();    //获取当前分钟数(0-59)
getSeconds();    //获取当前秒数(0-59)
getMilliseconds();   //获取当前毫秒数(0-999)
toLocaleDateString();    //获取当前日期
toLocaleTimeString();    //获取当前时间
toLocaleString( );       //获取日期与时间

例如:

var myDate = new Date();     //取得(创建)当前时间
myDate.getYear();       //获取当前年份(2位)
myDate.getFullYear();   //获取完整的年份(4位,1970-????)
myDate.getMonth();      //获取当前月份(0-11,0代表1月)
myDate.getDate();       //获取当前日(1-31)
myDate.getDay();        //获取当前星期X(0-6,0代表星期天)

myDate.getTime();       //获取当前时间(从1970.1.1开始的毫秒数)
myDate.getHours();      //获取当前小时数(0-23)
myDate.getMinutes();    //获取当前分钟数(0-59)
myDate.getSeconds();    //获取当前秒数(0-59)
myDate.getMilliseconds();   //获取当前毫秒数(0-999)
myDate.toLocaleDateString();    //获取当前日期
var mytime=myDate.toLocaleTimeString();    //获取当前时间
myDate.toLocaleString( );       //获取日期与时间


2、对以上相关函数的实际应用。

/**
*author 李铁雄
* 增加世界杯赛事表,如果当前时间2小时内,当前场正在播放,由显示当场,否则显示下一场;
*/
var CompetitionList = new Array(new Array(new Array("06-11","22:00","南非 VS 墨西哥")),new Array(new Array("06-12","02:30","乌拉圭 VS 法国"),new Array("06-12","19:30","韩国 VS 希腊"),new Array("06-12","22:00","阿根廷 VS 尼日利亚"))
,new Array(new Array("06-13","02:30","英格兰 VS 美国"),new Array("06-13","19:30","阿尔及利亚 VS 斯洛文尼亚"),new Array("06-13","22:00","塞尔维亚 VS 加纳")),new Array(new Array("06-14","02:30","德国 VS 澳大利亚"),new Array("06-14","19:30","荷兰 VS 丹麦"),new Array("06-14","22:00","日本 VS 喀麦隆"))
,new Array(new Array("06-15","02:30","意大利 VS 巴拉圭"),new Array("06-15","19:30","新西兰 VS 斯洛伐克"),new Array("06-15","22:00","科特迪瓦 VS 葡萄牙")),new Array(new Array("06-16","02:30","巴西 VS 朝鲜"),new Array("06-16","19:30","洪都拉斯 VS 智利"),new Array("06-16","22:00","西班牙 VS 瑞士"))
,new Array(new Array("06-17","02:30","南非 VS 乌拉圭"),new Array("06-17","19:30","阿根廷 VS 韩国"),new Array("06-17","22:00","希腊 VS 尼日利亚")),new Array(new Array("06-18","02:30","法国 VS 墨西哥"),new Array("06-18","19:30","德国 VS 塞尔维亚"),new Array("06-18","22:00","斯洛文尼亚 VS 美国"))
,new Array(new Array("06-19","02:30","英格兰 VS 阿尔及利亚"),new Array("06-19","19:30","荷兰 VS 日本"),new Array("06-19","22:00","加纳 VS 澳大利亚")),new Array(new Array("06-20","02:30","喀麦隆 VS 丹麦"),new Array("06-20","19:30","斯洛伐克 VS 巴拉圭"),new Array("06-20","22:00","意大利 VS 新西兰"))
,new Array(new Array("06-21","02:30","巴西 VS 科特迪瓦"),new Array("06-21","19:30","葡萄牙 VS 朝鲜"),new Array("06-21","22:00","智利 VS 瑞士")),new Array(new Array("06-22","02:30","西班牙 VS 洪都拉斯"),new Array("06-22","22:00","法国 VS 南非")),new Array(new Array("06-23","02:30","希腊 VS 阿根廷"),new Array("06-23","22:00","斯洛文尼亚 VS 英格兰"))
,new Array(new Array("06-24","02:30","加纳 VS 德国"),new Array("06-24","22:00","斯洛伐克 VS 意大利")),new Array(new Array("06-25","02:30","喀麦隆 VS 荷兰"),new Array("06-25","22:00","葡萄牙 VS 巴西")),new Array(new Array("06-26","02:30","智利 VS 西班牙"),new Array("06-26","22:00","乌拉圭(A1) VS 韩国(B2)"))
,new Array(new Array("06-27","02:30","美国(C1) VS 加纳(D2)"),new Array("06-27","22:00","德国(D1) VS 英格兰(C2)"))
,new Array(new Array("06-28","02:30","阿根廷(B1) VS 墨西哥(A2)"),new Array("06-28","22:00","荷兰(E1) VS 斯洛伐克(F2)"))
,new Array(new Array("06-29","02:30","巴西(G1) VS 智利(H2)"),new Array("06-29","22:00","巴拉圭(F1) VS 日本(E2)"))
,new Array(new Array("06-30","02:30","西班牙(H1) VS 葡萄牙(G2)"))

,new Array(new Array("07-02","22:00","荷兰 VS 巴西"))
,new Array(new Array("07-03","02:30","乌拉圭 VS 加纳"),new Array("07-03","22:00","阿根廷 VS 德国"))
,new Array(new Array("07-04","02:30","巴拉圭 VS 西班牙"))

,new Array(new Array("07-07","02:30","乌拉圭 VS 荷兰"))
,new Array(new Array("07-08","02:30","德国 VS 西班牙"))

,new Array(new Array("07-11","02:30","乌拉圭 VS 德国"))
,new Array(new Array("07-12","02:30","荷兰 VS 西班牙"))

);

var now = new Date();//取当前时间
var nowdaystr = ""//"0"+now.getMonth()+1 + "-" ;
var nowdays = "";
var nowmonth = now.getMonth()+1;
var nowday = now.getDate();
if(nowday<10){
nowdays = "0"+nowday;
}else{
nowdays = nowday;
}

if(nowmonth<10){
nowdaystr = "0"+nowmonth+"-"+nowdays;
}else{
nowdaystr = nowmonth+"-"+nowdays;
}
var hours = now.getHours();
var min = now.getMinutes();
var timestr =  "";
var timeMax = "";

if(hours<10){
timestr ="0"+ hours+":"+min;
if((hours+2)<10){
timeMax ="0"+ (hours+2)+":"+min;
}else{
timeMax =(hours+2)+":"+min;
}
}else{
timestr =hours+":"+min;
timeMax =(hours+2)+":"+min;
}

var listCount = CompetitionList.length;
var showStr = "";//最终要显示的字符串;
var flag = 0;
for(var i=0;i<listCount;i++){
var currentcount = CompetitionList[i].length;

if(CompetitionList[i][0][0] == nowdaystr){

for(var j=0;j<currentcount;j++){
var lastCount = CompetitionList[i][j].length;
var begintime = CompetitionList[i][j][1];
if((timeMax>begintime)&&(timestr<begintime)){
showStr = CompetitionList[i][j][0]+" "+ CompetitionList[i][j][1]+"  "+CompetitionList[i][j][2];  //取当场的数据;
flag = 1;
break;
}else if(timeMax<begintime){
showStr = CompetitionList[i][j][0]+" "+ CompetitionList[i][j][1]+"  "+CompetitionList[i][j][2];  //取当场的数据;
flag = 1;
break;
}else if(timestr>begintime){
continue;
}else{
if((j+1)==currentcount){
showStr = CompetitionList[i][j][0]+" "+ CompetitionList[i][j][1]+"  "+CompetitionList[i][j][2];  //取当场的数据;
flag = 1;
break;
}else{
continue;
}
}

}

}else if(CompetitionList[i][0][0] < nowdaystr){
continue;
}else{
if(flag == 1){
break;
}else{
showStr = CompetitionList[i][0][0]+" "+ CompetitionList[i][0][1]+"  "+CompetitionList[i][0][2];  //取下一场的数据;
break;
}
}
}


从上面的代码当中,可能大家不仔细看,还看不出容易产生BUG的地方,呵呵~~~~

1.1、对月份进行了相关的处理

因为JS当中,通过JS函数取得的月份都是从0开始计数的,所以一年12个月,取出来的数据总会比实际月份要小1,所以我们把月份取出来后,都会做加1处理。

1.2、对时间进行了处理

因为,通过JS函数取出的月份、小时、分钟、秒等都是从1开始的,当数字小于10的时候,取出的数据就会是一位,这样的话,如果要把这个时间与对应的时间进行比较,那肯定得做些处理。在这里,我们把时间只有一位的,在其前面加0处理,这样就格式化了时间,比较起来就不会出BUG。

var nowmonth = now.getMonth()+1;   //月份加1处理
var nowday = now.getDate();
if(nowmonth<10){              //月份只有一位的,在其前面加0格式化处理
nowdaystr = "0"+nowmonth+"-"+nowday;
}else{
nowdaystr = nowmonth+"-"+nowday;
}
var hours = now.getHours();
var min = now.getMinutes();
var timestr =  "";
var timeMax = "";

if(hours<10){      //小时也是一样的处理方法
timestr ="0"+ hours+":"+min;
if((hours+2)<10){
timeMax ="0"+ (hours+2)+":"+min;
}else{
timeMax =(hours+2)+":"+min;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: