在开发公司管理后台系统时,遇到了需要根据不同的时间段如“近一年、近半年、近三月、近一月、近一周”来获取并展示不同图表数据的需求,很是繁琐,项目开发周期又非常的短,自己想了一下,虽然有思路,但一时半会儿要写出来还是比较费时的,所以就索性上网找一个现成的轮子吧,还好已有大神写过同样的效果的,但离我实际的需求还是有点远,现在先参考大神的代码来做一个笔记吧:

//格式化时间
function formatTime(param) {
let y = param.getFullYear();
let m = param.getMonth() + 1;
let d = param.getDate();
m = m < 10 ? ("0" + m) : m;
d = d < 10 ? ("0" + d) : d;
return y + "-" + m + "-" + d + " ";
} /**
* 以当前时间为基础,便捷获取时间(最近2天,最近1周,最近2周,最近1月,最近2月,最近半年,最近一年,本周,本月,本年)
* @param { string } code
* @returns { Object }
*/
function getDate(code) {
const date = new Date();
let endTime = formatTime(date);
let date1 = Date.parse(date);
let start = '';
let end = '';
let oneDay = 1000 * 3600 * 24; switch (code) {
//今天
case 'today':
start = new Date();
break;
//最近2天
case 'lastTwoDay':
start = date1 - oneDay * 2;
break;
//最近1周
case 'lastOneWeek':
start = date1 - oneDay * 7;
break;
//最近2周
case 'lastTwoWeek':
start = date1 - oneDay * 14;
break;
//最近1月
case 'lastOneMonth':
start = new Date();
start.setMonth(start.getMonth() - 1)
break;
//最近2月
case 'lastTwoMonth':
start = new Date();
start.setMonth(start.getMonth() - 2)
break;
//最近3月
case 'lastThreeMonth':
start = new Date();
start.setMonth(start.getMonth() - 3)
break;
//最近半年
case 'lastHalfYear':
start = date1 - oneDay * 183;
break;
//最近一年
case 'lastOneYear':
start = new Date();
start.setYear(start.getFullYear() - 1)
break;
//本周
case 'thisWeek':
let a = 6 - date.getDay();
start = new Date(date1 - oneDay * a).setHours(0, 0, 0, 0);
end = new Date(date1 + oneDay * (1 + date.getDay())).setHours(24, 0, 0, 0)
break;
//本月
case 'thisMonth':
start = new Date();
start.setHours(0, 0, 0, 0)
start.setMonth(start.getMonth(), 1)
end = new Date(start)
end.setHours(0, 0, 0, 0)
end.setMonth(start.getMonth() + 1, 1)
break;
//本年
case 'thisYear':
start = new Date();
start.setHours(0, 0, 0, 0)
start.setMonth(0, 1)
start.setYear(start.getFullYear())
end = new Date(start)
end.setHours(0, 0, 0, 0)
end.setMonth(start.getMonth(), 1)
end.setYear(start.getFullYear() + 1)
break;
} return {
startTime: formatTime(new Date(start)),
endTime: end ? formatTime(new Date(end)) : endTime,
}
}

使用方法很简单,输出最近一周:console.log(getDate('lastOneWeek'))。

这种方法出来的效果如最近一周:{startTime: "2019-09-22 ", endTime: "2019-09-29 "},这样的处理适合那种只需要一个开始日期和结束日期的接口,而根据我们的实际需求,需要的是类似这样的数据:

最近一周:["2019-09-22", "2019-09-23", "2019-09-24", "2019-09-25", "2019-09-26", "2019-09-27", "2019-09-28", "2019-09-29"]或者最近一月:["2019-08-29", "2019-08-30", "2019-08-31", "2019-09-01", ..., "2019-09-29"]。

因为这个需求是用在类似折线图表这样的X轴做展示用的,如图:

是不是很繁琐?让前端处理起来,相当麻烦,写后台接口的同事说你们前端别处理了,太麻烦了,这个日期我们来返给你们。真是良心啊!!!

本文参考:https://www.cnblogs.com/qinacao/p/9117514.html

js以当前时间为基础,便捷获取时间(最近2天,最近1周,最近2周,最近1月,最近2月,最近半年,最近一年,本周,本月,本年)的更多相关文章

  1. js设置本周 本月 本年

    var SetSearchDate = function (sign, sid, eid) {//sign 标识符区分本周本月本年,sid开始时间id,eid结束时间id var now = new ...

  2. Js:消息弹出框、获取时间区间、时间格式、easyui datebox 自定义校验、表单数据转化json、控制两个日期不能只填一个

    (function ($) { $.messageBox = function (message) { $.messager.show({ title:'消息框提示', msg:message, sh ...

  3. Mysql自动设置时间(自动获取时间,填充时间)

    应用场景: 1.在数据表中,要记录每条数据是什么时候创建的,不需要应用程序去特意记录,而由数据数据库获取当前时间自动记录创建时间: 2.在数据库中,要记录每条数据是什么时候修改的,不需要应用程序去特意 ...

  4. Mysql设置创建时间字段和更新时间字段自动获取时间,填充时间

    1.引言在实际开发中,每条数据的创建时间和修改时间,尽量不需要应用程序去记录,而由数据库获取当前时间自动记录创建时间,获取当前时间自动记录修改时间. 2.创建语句(1)–添加CreateTime 设置 ...

  5. Mysql数据库存储数据时间与系统获取时间不一致

    最近进行项目开发,发现存在数据库内的数据和系统查询到的数据相差8小时 发现有2种比较合适的方法 (一)修改mysql服务的区时 centos进入mysql查看/修改时区 1.输入以下命令进入mysql ...

  6. moment.js获取本周本月本年的开始日期和结束日期

    //获取本日 const startDate = moment().format('YYYY-MM-DD'); const startDate = moment().format('YYYY-MM-D ...

  7. JAVA获取本周 本月 本年 第一天和最后一天

    /** * 日期工具类 */ public class DateUtils { /** * 获取今天 * @return String * */ public static String getTod ...

  8. js获取时间加多山天和时间戳转换成日期

    function huoqu(){    var data = $("#data").val();//获取的时间    var day = $('#day').val();//往后 ...

  9. javaScript系列:js中获取时间new Date()详细介绍

    var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)m ...

随机推荐

  1. MVC插件式开发平台

    ---恢复内容开始--- 经过DyOS.BraveOS1.0再到BraveOS2.0,系统现在已经开发了下载. 我们的目标是,网页版操作系统,可以在线安装更新软件,并提供二次开发平台,提供基础的逻辑和 ...

  2. laravel .env 文件的使用

    转载地址  http://www.cnblogs.com/Eden-cola/p/DotEnv-in-lumen.html umen 是 laravel 的衍生品,核心功能的使用和 laravel 都 ...

  3. SpringBoot集成thymeleaf(自定义)模板中文乱码的解决办法

    楼主今天在学习SpringBoot集成thymelaf的时候报了中文乱码的错误,经过网上的搜索,现在得到解决的办法,分享给大家: package com.imooc.config; import or ...

  4. 怎样在RxJS Observable中使用Async-Await

    怎样在RxJS Observable中使用Async-Await 一般情况下 async-await 和 Observables 并不能“在一起使用”.但RxJS 从一开始就具备与 Promises ...

  5. 【js】vue 2.5.1 源码学习 (七) 初始化之 initState 响应式系统基本思路

    大体思路(六) 本节内容: 一.生命周期的钩子函数的实现 ==> callHook(vm , 'beforeCreate') beforeCreate 实例创建之后 事件数据还未创建 二.初始化 ...

  6. 【js】vue 2.5.1 源码学习 (四) 钩子函数 资源选项 watch 的合并策略

    大体思路 (三)    1.钩子函数 自定义策略       LIFECYCLE_HOOKS= []      created = [function(){} , function(){}] 组装方法 ...

  7. linux 短延时

    当一个设备驱动需要处理它的硬件的反应时间, 涉及到的延时常常是最多几个毫秒. 在这 个情况下, 依靠时钟嘀哒显然不对路. The kernel functions ndelay, udelay, an ...

  8. D3.js力导向图(适用于其他类型图)中后添加元素遮盖已有元素的问题解决

    上一篇说了在D3.js中动态增加节点及连线的一种实现方式,但是有后添加元素遮盖原节点的现象,这一篇说一下出现这个现象的解决办法. 在D3.js中后添加的元素是会遮盖先添加的元素的,同时还有一个设定:后 ...

  9. 2018-2-13-git-合并两个仓库

    title author date CreateTime categories git 合并两个仓库 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23:3 ...

  10. JMeter数据库测试计划

    在系统上安装数据库服务器之后. 按着这些次序: 创建名为testdb的数据库. 创建表 - tb_user. 将记录插入到tb_user表中. 下图显示了创建的数据库及其记录. 注意:您需要将相应的J ...