需求:

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

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

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

  ……

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

获得当前年、月、日
获得本月最后一日
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. Spring服务发现和注册

  2. kafka消费失败

    kafka消费失败 搞半天是路径错误,但是不会报错 改为 job 就对了

  3. 洛谷 P2357 守墓人

    洛谷 P2357 守墓人 题目描述 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然.. ...

  4. luoguP3172 [CQOI2015]选数

    题意 所求即为: \(\sum\limits_{i_1=L}^{R}\sum\limits_{i_2=L}^{R}...\sum\limits_{i_k=L}^{R}[\gcd(i_1,i_2,... ...

  5. ProceedingJoinPoint获取实现类接口上的注解

    使用aspectj处理拦截aop,需要获取实现类接口上的注解 public Object around(ProceedingJoinPoint pjp) throws Throwable{ long ...

  6. tornado内置接口调用顺序initialize\prepare...

    一. initialize方法 首先, 该方法是框架预留的一个初始化时加载自定义内容的钩子, 其会在http请求方法之前调用 二. prepare方法 预处理方法, 在执行对应的请求方法之前调用. h ...

  7. 【可视化】Vue基础

    作者 | Jeskson 来源 | 达达前端小酒馆 Vue简介 Vue框架,框架的作者,尤雨溪,组件化,快速开发的特点. 生命周期 beforeCreate:组件刚刚被创建 created:组件创建完 ...

  8. linux操作记录

    cd ~ 是返回根目录cd .. 跳转到上一页cd 目录 是跳转到目录文件 php -i | grep php.ini  是查看php.ini在哪个文件 vi 是查看文件内容,:i 是编辑文件内容 : ...

  9. 禁用Chrome的“请停用以开发者模式运行的扩展程序”提示

    1.前言 每次启动都会有一个烦人的“请停用以开发者模式运行的扩展程序”提示,这个提示有多烦人,接触过的人都知道,启动的时候它不立即提示,等过了几秒钟等你打开某个网页开始执行某些操作时它突然弹出来干扰你 ...

  10. python 爬取媒体文件(使用chrome代理,启动客户端,有防火墙)

    #coding = utf-8 ''' 中文转经纬度 ''' import time,json import urllib.request from selenium import webdriver ...