需求:

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

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

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

  ……

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

获得当前年、月、日
获得本月最后一日
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. 201871010101-陈来弟《面向对象程序设计(JAVA)》 第13周学习总结

    201871010101-陈来弟<面向对象程序设计(JAVA)> 第13周学习总结 实验十一 图形界面事件处理技术 实验时间 2019-11-22 第一部分:理论知识 一.事件处理 1.事 ...

  2. Tomcat的下载和安装

    登录Tomcat 站点,下载Tomcat最新版本http://tomcat.apache.org/Windows平台下载ZIP包,LInux平台下载TAR包,不建议下载安装文件,因为安装文件的 Tom ...

  3. Vue小练习(for循环,push方法,冒泡,if判断(以及与for循环的连用),按钮高亮,根据input框筛选数据)

    vue练习 ''' 1. 先有一下成绩单数据 scores = [ { name: 'Bob', math: 97, chinese: 89, english: 67 }, { name: 'Tom' ...

  4. keil mdk+stm32的ac5和 ac6两个编译器下的字节对齐操作方法

    最近在使用ac6.9的编译器,编译速度是真的很快,使用stm32的hal库编译速度也比ac5的编译器快很多.本文试验stm32中字节对齐的代码测试,主要是结构体,因为结构体中实际项目中用到最多,同时在 ...

  5. JDOJ 1946 求最长不下降子序列个数

    Description 设有一个整数的序列:b1,b2,…,bn,对于下标i1<i2<…<im,若有bi1≤bi2≤…≤bim 则称存在一个长度为m的不下降序列. 现在有n个数,请你 ...

  6. Mysql数据库基础命令

    删除一个表: drop table if exists 表名; 在表中插入行: Insert into 表名 values(, , ,) 创建表: Create table 表名( Id int(10 ...

  7. Linux学习笔记-第3天 - 勤能补拙

    学一门技术,基础一定要打牢,多练习是关键,还要尽可能理解其背后的知识.并时刻提醒自己,求知若饥,虚心若愚.

  8. API数据加密框架monkey-api-encrypt

    之前有写过一篇加密的文章<前后端API交互如何保证数据安全性>.主要是在Spring Boot中如何对接口的数据进行自动加解密操作,通过注解的方式来指定是否需要加解密. 原理也很简单,通过 ...

  9. Gitlab CI/CD

    Gitlab CI/CD 前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就 ...

  10. 视觉融合定位github

    1. obr_slam有关的非常有用的github链接: https://github.com/Ewenwan/MVision/tree/master/vSLAM/oRB_SLAM2 2. gnss, ...