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

//格式化时间
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. NIO 中文乱码自我解决的简单DEMO

    import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStrea ...

  2. H3C 物理层

  3. Ant Design的Form组件中FormItem名称相同引起的问题

    1.问题描述 在使用Antd组件Form表单的过程中,会出现FormItem同名的情况,此时要特别注意同名引起的表单行为异常问题,主要表现在以下方面: (1)同名表单项的值共享,并且其中一个的值改变, ...

  4. Javassist指引(二)--ClassPool

    原文链接 上一章: Javassist指引(一) 2.ClassPool ClassPool是一个CtClass的容器.因为编译器随时可能访问一个CtClass类,所以一旦一个CtClass创建,它将 ...

  5. Laravel 5.* 执行seeder命令出现错误的解决方法

    最近在使用Laravel开发一个项目,测试中需要增加数据库基础数据动作,当第一次执行完`php artisan db:seed` 后,增加新的seeder文件时执行会报错.错误信息如下`[Reflec ...

  6. 总结thinkphp快捷查询getBy、getField、getFieldBy用法及场景

    thinkphp作为国内现阶段最成熟的框架:没有之一: 不得不说是有好些特别方便的方法的: 然而如果初接触thinkphp的时候难免会被搞的有点迷茫: for example这些: getBy get ...

  7. java 实现类似spring的可配置的AOP框架

    一.工厂类BeanFactory: 1.工厂类BeanFactory负责创建目标类或代理类的实例对象,并通过配置文件实现切换. 2.getBean方法根据参数字符串返回一个相应的实例对象,如果参数字符 ...

  8. P1007 N钱M鸡问题

    题目描述 已知公鸡 \(5\) 元钱一只,母鸡 \(3\) 元钱一只,小鸡 \(3\) 只 \(1\) 元钱. 告诉你一个整数 \(n(1 \le n \le 1000)\) ,你现在要花 \(n\) ...

  9. linux 定时器 API

    内核提供给驱动许多函数来声明, 注册, 以及去除内核定时器. 下列的引用展示了基本的 代码块: #include <linux/timer.h> struct timer_list { / ...

  10. 常见DOS操作

    D: 去往D盘 cd.. 返回上一级目录 cd 文件名 目录切换到该文件名(子目录)下 cd \ 直接回根目录 dir 当前根目录下的文件目录 dir /s 所有目录