今天是学习JS的第二天,老师留的作业中出现了一部分关于日期的计算。如果用普通方法总感觉太麻烦而且容易错,所以就是Date对象来解决。不知道是不是我的错觉,总感觉JS中的Date对象功能比较差,比如求日期间隔。在Delphi中只需要把2个日期变量相减,并且可以自定义日期的显示方式。我今天使用,结果却报错,如何才能格式化日期呢,只能获取一遍年,再获取月,获取日,然后自己拼接,多麻烦啊。不像Delphi里的formatDateTime
var CurrDate=new Date();//今天的日期
console.log(toDateString(CurrDate));
//报错了
我省略了HTML部分,需要提前放置nput标签并设置id属性。
第一个:输入年月显示此月有多少天
var sYear,sMonth;
sYear=parseInt(document.getElementById("sYear").value);
sMonth=parseInt(document.getElementById("sMonth").value);
var date = new Date(sYear, sMonth, 0);
//貌似new date出来的月会比你传入的值大1,但是天传入0,显示的则是上个月最后一天
alert('输入年月的天数为'+date.getDate());
//getDate()获取那一天的天数(1-31),这就是那个鱼的天数
第二个:输入年月日显示星期几
var sYear,sMonth,sDay,str;
sYear=parseInt(document.getElementById("sYear").value);
sMonth=parseInt(document.getElementById("sMonth").value);
sDay=parseInt(document.getElementById("sDay").value);
var date=new Date(sYear,sMonth-1,sDay);
//sMonth必须减一,估计是外国人的月是从0开始的???
switch(date.getDay()){ //getDay()返回是0-6
case 0:str='礼拜天';break;
case 1:str='礼拜一';break;
case 2:str='礼拜二';break;
case 3:str='礼拜三';break;
case 4:str='礼拜四';break;
case 5:str='礼拜五';break;
case 6:str='礼拜六';break;
default:str='输入数据不正确';break;
}
alert('输入的那一天是:'+str);
第三个:输入年月日返回该日为当年的多少天
年月日返回该日为当年的多少天其实就是在本年中这一天之前有多少天
这个稍微有点难度,因为要考虑闰年与平年,本来是打算判断闰年再加一,但是借用第一个问题的方法可以无需判断闰平年。
同时,需要一个循环来累加在输入日期之前的每个月的天数。
var sYear,sMonth,sDay,SumDay=0;
sYear=parseInt(document.getElementById("sYear").value);
sMonth=parseInt(document.getElementById("sMonth").value);
sDay=parseInt(document.getElementById("sDay").value);
if(sMonth>1){
for(i=1;i
其中GetDaysOfMonth函数是从第一个问题中提取
function GetDaysOfMonth(sYear,sMonth){
var date = new Date(sYear, sMonth, 0);
return(parseInt(date.getDate()));
}
第四个:时间间隔
懒得多放控件,所以把截止日期默认为当天。
var sYear,sMonth,sDay,d,SumDay=0;
sYear=parseInt(document.getElementById("sYear").value);
sMonth=parseInt(document.getElementById("sMonth").value);
sDay=parseInt(document.getElementById("sDay").value);
var BeDate=new Date(sYear,sMonth-1,sDay);
var CurrDate=new Date();//当前系统日期
//console.log(BeDate);
//console.log(CurrDate);
SumDay=Math.floor(Math.abs(Date.parse(CurrDate)-Date.parse(BeDate))/(1000*60*60*24));
alert(SumDay);
第五个:日期有效性验证
判断日期有效性的2种方法,第一种是老师教的,通过if else语句,另一种则是借助于date对象。
先说第一种。说白就是:一三五七八十腊,三十一天永不变。四、六、九、十一是31天,还有一个2月需要判断闰年。
var year = parseInt(document.getElementById("textYear").value),;
month = parseInt(document.getElementById("textMonth").value),;
date = parseInt(document.getElementById("textDate").value);
//2、判断
var str="不合法";
if(year>=1900){//年份合法
if(month>=1 && month<=12){//月份合法
//1、31天的
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
if(date>=1 && date<=31){
str="合法";
}
}else if(month==4 || month==6 || month==9 || month==11 ){//30天的
if(date>=1 && date<=30){
str="合法";
}
}else if(month==2){
if((year%4==0 && year%100!=0)||(year%400==0)){//闰年
if(date>=1 && date<=29){
str="合法";
}
}else{
if(date>=1 && date<=28){
str="合法";
}
}
}
}
}
第二种,当你将错误的年月日组合,然后创建一个date对象时,这个日期其实不对的,比如你放入1月33日,他会自动转成2月2日.利用这种特性,我们可以判断你输入的日期是否合法。(PS.需先验证你输入的是数字型)
function IsVaildDate(sYear,sMonth,sDay){
var IsDate=false;
var date=new Date(sYear,sMonth-1,sDay);
if (sYear==date.getFullYear()&&sMonth-1==date.getMonth()&&sDay==date.getDate()){
IsDate=true;
}
return IsDate;
}