关于前端日期的一点小记

今天看前端本地存储的文章时,看到cookie,就想再加深学习一下cookie。打开MDN找到cookie一节,看到设置expires时,里面提到世界末日,秉承一颗好奇的心,点开了世界末日2038(有兴趣的同学自行百度),一路捋到了“千年虫”问题(有兴趣的同学还是自行百度,本人太懒,不粘贴了)。

对于永久cookie我们用了Fri, 31 Dec 9999 23:59:59 GMT作为过期日。如果你不想使用这个日期,可使用世界末日[Tue, 19 Jan 2038 03:14:07 GMT],它是32位带符号整数能表示从1 January 1970 00:00:00 UTC开始的最大秒长(即01111111111111111111111111111111, 是 new Date(0x7fffffff * 1e3)).

千年虫:大致就是在公元2000年的时候,所有的电子设备都有可能出现瘫痪。这在今天听来大致就是世界末日了,当时也差不多。因为计算机存储器的原因,对于年份只存储了两位数,于是某些程序跨千年时就出现了归零。这bug影响简直巨大啊!除了打开电脑之后的应用程序,信用卡,医学业,航空业……受到影响的行业太多了。查询这个事件的时候,边惊于这个bug的影响力,边感叹于2000年的技术发展!2000年,我还离这个行业差着十几个年头,甚至我都还没有见过大哥大,见过最科技的东西可能就是家里的那台电视和DVD播放机(2000年大概是有了吧,年龄太小不记事)?不知道这算不算初代世纪bug……然后由此联想到了前段时间做过的项目中出现的一个bug!

 

先说下出bug的那部分需求:

那是一个统计图页面(老套的开场hiahiahia),里面包含十来个echarts统计图,最上面是一个日期搜索,日期段搜索!搜索的需求是按选中的日期段查询统计图数据,初始加载时默认查询当月到前一个月之间的数据,问题就来了。

学前端都知道:

let date = new Date();
let month = date.getMonth();
date;    // Wed Feb 24 2021 10:58:19 GMT+0800 (中国标准时间)
month;   // 1 上面的日期中显示是 Feb 2月,但是getMonth获取到的是比当前月小1的 
month = date.getMonth()+1;   // 2 所以一般我们想要获取当前月份,都需要+1

于是,,,在2021年4月,美美的元旦放假3天后,下面这段代码就出问题了,页面报错,统计图加载不出来数据。

let date = new Date();  
let endDate = date.getFullYear()+ '-' + (date.getMonth()+1);  // 获取截止月份
let startDate = date.getFullYear()+ '-' + date.getMonth();       // 获取起始月份
let str = startDate + ',' + endDate;                          // 获取字符连接串作为数据传递

乍看大概逻辑是没什么问题的,但是!1月怎么办呢

传给服务器的截止月份是1月,起始月份变成了0月,2021年0月……棒棒的

立刻上手,修改代码

let date = new Date();  
let endMonth = date.getMonth()+1;
let endDate = date.getFullYear()+ '-' + endMonth;  // 获取截止月份
let startDate = '';                                           // 获取起始月份

endMonth==1 ? ( startDate = (date.getFullYear() - 1)+ '-' + 12 )
           : ( startDate = date.getFullYear()+ '-' + date.getMonth() );

let str = startDate + ',' + endDate;                          // 获取字符连接串作为数据传递

涉及到这种日期查询的,加上这个是两个统计图页面。引以为戒!对bug的敏感度不够,这种零零碎碎的点,记得很清楚,但实际上使用的方法上,需要考虑的更周到些。否则如果这种有问题的逻辑大量投入使用时,可能引起的bug就不只是页面报错的问题了。

然后的然后,,,继续看前端存取去liao~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值