• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

JS中关于内置对象-------Date类型的一个小程序,个人出错和调试 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Date:

什么是: 专门封装一个时间,并提供操作事件的API
何时: 今后只要保存和操作时间
如何: 
 创建: 4种: 
  1. 创建日期对象,同时获得当前系统时间: 
     var now=new Date();
     强调: 获取的是客户端本地时间
  2. 创建日期对象,封装自定义时间
     var date=new Date("yyyy/MM/dd hh:mm:ss");
              new Date(yyyy,MM-1,dd,hh,mm,ss);
  3. 使用毫秒数创建: 
     var date=new Date(ms); //ms转换当地时区时间
   何时: 今后服务器上存储时间都是用毫秒数
        因为不用考虑时区问题
        客户端就需要用new Date将毫秒数转为当地时区对应的时间显示。
  4. 复制一个日期: 
     var date1=new Date("xxx");
     var date2=new Date(date1);
   何时: 因为日期的计算都是直接修改原日期对象
        所以旧时间无法保留
        如果希望同时保留计算前后的两个时间时
        就必须先将原日期复制一个副本,再用副本计算
原理: 其实日期对象中保存的是一个毫秒数
     从1970年1月1日0点至今
        //获取当前时间距离1970/1/1日的毫秒数
        console.log(now.getTime());
        
        //计算机中最大的数值:
        console.log(Number.MAX_VALUE);

API: 
 单位: FullYear  Month  Date  Day
      Hours   Minutes  Seconds  Milliseconds
 1. 每个单位都有一对儿getXXX/setXXX方法
     其中: getXXX() 负责获取指定单位的值
          setXXX(n) 负责设置指定单位的新值
            setXXX(n)可自动根据n调整进制
   比如: getDate()  setDate(n)
    特例: Day没有setDay()方法,星期不允许修改
 2. 取值范围: 月中的日(date) 从1~31结束,
           其余都是从0开始到进制-1结束: 
   Month: 0~11 比现实少1
   Date: 1~31 
   Day: 0~6 
   hours: 0~23
   minutes/seconds: 0~59
计算: 2种:
 1. 两日期对象可直接相减,结果是毫秒差
   何时: 计算倒计时
 2. 对一个日期的任意单位做加减:
   3步: 1.取值, 2.计算, 3.放回去
     其实可简化为: date.setXXX(date.getXXX()+n)
日期的格式化: 
 date.toString() 将日期转为当地时间的完整格式
 date.toLocaleString() 将日期转为当地时间的简化格式
 date.toLocaleDateString() 仅保留日期部分
 date.toLocaleTimeString() 仅保留时间部分
 date.toGMTString(); 将当地时间转为0时区标准时间

以下是自己尝试写的关于续签合同日期计算的小程序:

            //创建日期对象hiredate:2018/9/30
			var hiredate=new Date("2018/9/30");
			//复制hiredate到到期时间enddate中
			var enddate=new Date(hiredate);
			//将enddate+3年
			enddate=enddate.setFullYear(enddate.getFullYear()+3);
			//复制enddate到续签时间renewdate
			var renewdate=new Date(enddate);
			//将renewdate-1月
			renewdate=renewdate.setMonth(renewdate.getMonth()-1);
			//如果renewdate是周六
			if(renewdate.getDay()==6){
				//renewdate-1天
				renewdate=renewdate.setDate(renewdate.getDate()-1);
				}
			//否则,如果renewdate是周日
			else if(renewdate.getDay()==0){
			//renewdate-2天
				renewdate=renewdate.setDate(renewdate.getDate()-2);
				}
			//复制renewdate到提醒时间alertdate
			var alertdate=new Date(renewdate);
			//将alertdate-7天
			alertdate=alertdate.setDate(alertdate.getDate()-7);
			console.log(
				"到期时间:"+enddate,
				"续签时间:"+renewdate,
				"提醒时间:"+alertdate
			);

运行时报错:

经过一番调试,终于发现问题所在,setMonth之类的date对象的API返回值不是date对象,所以再将其赋给renewdate时,数据类型发生变化。所以在if判断条件中会报错getDay()不是一个函数,因为这里renewdate已经不是date对象。

           //创建日期对象hiredate:2018/9/30
			var hiredate=new Date("2018/9/30");
			//复制hiredate到到期时间enddate中
			var enddate=new Date(hiredate);
			//将enddate+3年
			enddate.setFullYear(enddate.getFullYear()+3);
			//复制enddate到续签时间renewdate
			var renewdate=new Date(enddate);
			//将renewdate-1月
			renewdate.setMonth(renewdate.getMonth()-1);
			//如果renewdate是周六
			if(renewdate.getDay()==6){
				//renewdate-1天
				renewdate.setDate(renewdate.getDate()-1);
				}
			//否则,如果renewdate是周日
			else if(renewdate.getDay()==0){
			//renewdate-2天
				renewdate.setDate(renewdate.getDate()-2);
				}
			//复制renewdate到提醒时间alertdate
			var alertdate=new Date(renewdate);
			//将alertdate-7天
			alertdate.setDate(alertdate.getDate()-7);
			console.log(
				"到期时间:"+enddate,
				"续签时间:"+renewdate,
				"提醒时间:"+alertdate
			);

执行结果如下:

希望我的问题能给大家带来帮助。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
小程序嵌套h5页面发布时间:2022-07-18
下一篇:
【小程序】小程序调试发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap