需求:

  很多时候对于页面设置默认日期,我们有这样的需求——

  日期频度为月度:如果今天是本月最后一天,默认日期取今天,否则取上月最后一天;

  日期频度为季度:如果今天是本季度最后一天,默认日期取今天,否则取上季度最后一天

  ……

我们以月度为例,按需求写出伪代码:

获得当前年、月、日
获得本月最后一日
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

http://momentjs.cn/

安装:

npm install moment --save

ok\(^o^)/~就写到这里,季度年度的写法类似就不赘述了,如果有错误或者可以更简单的写法欢迎指出。

JS日期处理——月末、季度末的更多相关文章

  1. js日期计算及快速获取周、月、季度起止日

    var now = new Date(); //当前日期 var nowDayOfWeek = (now.getDay() == 0) ? 7 : now.getDay() - 1; //今天是本周的 ...

  2. ORACLE获取年初年末,月初月末,季度初季度末

    转自:https://www.cnblogs.com/leqhome/p/5319984.html --年初,年末select trunc(sysdate,'yyyy') from dual;sele ...

  3. 161226、js日期格式化

    JavaScript Date format(js日期格式化) 方法一:// 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季 ...

  4. JS获取当前日期时间及JS日期格式化

    Js获取当前日期时间: var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份( ...

  5. JS日期工具类(转)

    javascript Date format(js日期格式化) https://www.cnblogs.com/zhangpengshou/archive/2012/07/19/2599053.htm ...

  6. js日期格式化 扩展Date()

    javascript Date format(js日期格式化) 方法一: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(H/h).分(m).秒(s ...

  7. js日期控件遇到的问题

    一.问题: 在web项目里有很多时候需要使用日期控件来完成相关的功能,但是日期控件的日期格式又和我们的需求不符 那么,就需要我们来自定义日期的格式完成需求 二.解决: 1.取月末: (1)强制取值: ...

  8. js日期工具

    /** * 日期工具类 */ define(function(require, exports, module) { var constants = require("constants&q ...

  9. c# js日期工具

    c#获取日期当年最后一天:model.StartDate.AddYears(1).AddSeconds(-1) js日期工具: var dateToolObj = { methods: { //url ...

随机推荐

  1. Linux 动态链接库路径 LD_LIBRARY_PATH

    如果遇到一些 .so 缺失问题 把路径添加到这个变量里面就可以了,注意跟PATH的区别 export LD_LIBRARY_PATH= 注意使用 export 否则变量设置成功但是子进程不可见

  2. 201871010107-公海瑜《面向对象程序设计(java)》第十四周学习总结

    201871010107-公海瑜<面向对象程序设计(java)>第十四周学习总结             项目                            内容   这个作业属于 ...

  3. 201871010108-高文利《面向对象程序设计(java)》第十一周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ht ...

  4. uiautomator手动调试与快速高度设置

    创建java工程:Demo1包名:com.bing.cn类名:Test测试用例:testDemo android create uitest-project -n Demo1 -t 7 -p E:\e ...

  5. 04-numpy-笔记-transpose

    借鉴代码https://blog.csdn.net/xiongchengluo1129/article/details/79017142 吐槽一下CSDN的垃圾广告.. 这是转置,所以1维(向量)和2 ...

  6. MyBatis 使用 foreach 批量插入

    MyBatis 使用 foreach 批量插入 参考博文 老司机学习MyBatis之动态SQL使用foreach在MySQL中批量插入 使用MyBatis一次性插入多条数据时候可以使用 <for ...

  7. Netty粘包问题(六)

    netty使用tcp/ip协议传输数据,而tcp/ip协议是类似水流一样的数据传输方法.多次访问的时候可能出现粘包的问题,解决这种问题的方式有如下几种. 一.定长数据流 二.特殊结束符 三.

  8. 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 ...

  9. [LeetCode] 281. Zigzag Iterator 之字形迭代器

    Given two 1d vectors, implement an iterator to return their elements alternately. Example: Input: v1 ...

  10. Optical Flow Estimation 发展历程 (1)

    Optical flow estimation Traditional Method Variational approach TVL-1 Deep Method Supervised FlowNet ...