JS日期处理——月末、季度末
需求:
很多时候对于页面设置默认日期,我们有这样的需求——
日期频度为月度:如果今天是本月最后一天,默认日期取今天,否则取上月最后一天;
日期频度为季度:如果今天是本季度最后一天,默认日期取今天,否则取上季度最后一天
……
我们以月度为例,按需求写出伪代码:
获得当前年、月、日
获得本月最后一日
if(当前日==本月最后一日){
取值=当前年+月+日
}else{
取值=当前年+上月+上月最后一日
}
如上关键,我们需要知道如何根据当前年月获得该月的最后一天是几号。
var lastDay=(y,m)=>(new Date(y,m,0).getDate())
运行测试如下,可见这是个还不错的方法。

现在我们用js翻译一下上面的伪代码:
var getDafaultDate=()=>{
var today = new Date();
var y = today.getFullYear();
var m = today.getMonth()+1;
var d = today.getDate();
var lastD = lastDay(y,m);
var defaultDate = `${y}-${m}-${d}`;
if(d!=lastD){
defaultDate = `${y}-${m-1}-${lastDay(y,m-1)}`;
}
return defaultDate ;
}
可见今天是2019/11/29,执行如下:

这里我们发现代码中有点漏洞呀,假如今天是2020/1/1,结果岂不是要变成‘2020-0-31’。
所以我们需要加一句处理:
var getDafaultDate=()=>{
var today = new Date();
var y = today.getFullYear();
var m = today.getMonth()+1;
var d = today.getDate();
varformat lastD = lastDay(y,m);
var defaultDate = `${y}-${m}-${d}`;
if(d!=lastD){
//若是1月 取上年12月末
if(m==1){
y=y-1;
m=12;
}else{
m=m-1;
}
defaultDate = `${y}-${m-1}-${lastDay(y,m-1)}`;
}
return defaultDate ;
}
然后然后然后,你要说需要‘YYYY-MM-DD’的格式,如果月份日期是一位数不行blabla……那你就写一个格式化嘛ε=(´ο`*)))
这里我们可以用moment.js和format()试试:
import moment from 'moment';
... ... defaultDate = moment(defaultDate,'YYYY/MM/DD').format('YYYY-MM-DD');
其实这个moment.js有很多实用的方法,比如说我们之前需要”获取一个月的最后一天”……
想要了解的小伙伴可以官网看看API
安装:
npm install moment --save
ok\(^o^)/~就写到这里,季度年度的写法类似就不赘述了,如果有错误或者可以更简单的写法欢迎指出。
JS日期处理——月末、季度末的更多相关文章
- js日期计算及快速获取周、月、季度起止日
var now = new Date(); //当前日期 var nowDayOfWeek = (now.getDay() == 0) ? 7 : now.getDay() - 1; //今天是本周的 ...
- ORACLE获取年初年末,月初月末,季度初季度末
转自:https://www.cnblogs.com/leqhome/p/5319984.html --年初,年末select trunc(sysdate,'yyyy') from dual;sele ...
- 161226、js日期格式化
JavaScript Date format(js日期格式化) 方法一:// 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季 ...
- JS获取当前日期时间及JS日期格式化
Js获取当前日期时间: var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份( ...
- JS日期工具类(转)
javascript Date format(js日期格式化) https://www.cnblogs.com/zhangpengshou/archive/2012/07/19/2599053.htm ...
- js日期格式化 扩展Date()
javascript Date format(js日期格式化) 方法一: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(H/h).分(m).秒(s ...
- js日期控件遇到的问题
一.问题: 在web项目里有很多时候需要使用日期控件来完成相关的功能,但是日期控件的日期格式又和我们的需求不符 那么,就需要我们来自定义日期的格式完成需求 二.解决: 1.取月末: (1)强制取值: ...
- js日期工具
/** * 日期工具类 */ define(function(require, exports, module) { var constants = require("constants&q ...
- c# js日期工具
c#获取日期当年最后一天:model.StartDate.AddYears(1).AddSeconds(-1) js日期工具: var dateToolObj = { methods: { //url ...
随机推荐
- Linux 动态链接库路径 LD_LIBRARY_PATH
如果遇到一些 .so 缺失问题 把路径添加到这个变量里面就可以了,注意跟PATH的区别 export LD_LIBRARY_PATH= 注意使用 export 否则变量设置成功但是子进程不可见
- 201871010107-公海瑜《面向对象程序设计(java)》第十四周学习总结
201871010107-公海瑜<面向对象程序设计(java)>第十四周学习总结 项目 内容 这个作业属于 ...
- 201871010108-高文利《面向对象程序设计(java)》第十一周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ht ...
- uiautomator手动调试与快速高度设置
创建java工程:Demo1包名:com.bing.cn类名:Test测试用例:testDemo android create uitest-project -n Demo1 -t 7 -p E:\e ...
- 04-numpy-笔记-transpose
借鉴代码https://blog.csdn.net/xiongchengluo1129/article/details/79017142 吐槽一下CSDN的垃圾广告.. 这是转置,所以1维(向量)和2 ...
- MyBatis 使用 foreach 批量插入
MyBatis 使用 foreach 批量插入 参考博文 老司机学习MyBatis之动态SQL使用foreach在MySQL中批量插入 使用MyBatis一次性插入多条数据时候可以使用 <for ...
- Netty粘包问题(六)
netty使用tcp/ip协议传输数据,而tcp/ip协议是类似水流一样的数据传输方法.多次访问的时候可能出现粘包的问题,解决这种问题的方式有如下几种. 一.定长数据流 二.特殊结束符 三.
- luoguP2260 [清华集训2012]模积和
题意 \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}n\%i*m\%j*[i!=j]\) \(\sum\limits_{i=1}^{n}\sum\limits ...
- [LeetCode] 281. Zigzag Iterator 之字形迭代器
Given two 1d vectors, implement an iterator to return their elements alternately. Example: Input: v1 ...
- Optical Flow Estimation 发展历程 (1)
Optical flow estimation Traditional Method Variational approach TVL-1 Deep Method Supervised FlowNet ...