js以当前时间为基础,便捷获取时间(最近2天,最近1周,最近2周,最近1月,最近2月,最近半年,最近一年,本周,本月,本年)
在开发公司管理后台系统时,遇到了需要根据不同的时间段如“近一年、近半年、近三月、近一月、近一周”来获取并展示不同图表数据的需求,很是繁琐,项目开发周期又非常的短,自己想了一下,虽然有思路,但一时半会儿要写出来还是比较费时的,所以就索性上网找一个现成的轮子吧,还好已有大神写过同样的效果的,但离我实际的需求还是有点远,现在先参考大神的代码来做一个笔记吧:
//格式化时间
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月,最近半年,最近一年,本周,本月,本年)的更多相关文章
- js设置本周 本月 本年
var SetSearchDate = function (sign, sid, eid) {//sign 标识符区分本周本月本年,sid开始时间id,eid结束时间id var now = new ...
- Js:消息弹出框、获取时间区间、时间格式、easyui datebox 自定义校验、表单数据转化json、控制两个日期不能只填一个
(function ($) { $.messageBox = function (message) { $.messager.show({ title:'消息框提示', msg:message, sh ...
- Mysql自动设置时间(自动获取时间,填充时间)
应用场景: 1.在数据表中,要记录每条数据是什么时候创建的,不需要应用程序去特意记录,而由数据数据库获取当前时间自动记录创建时间: 2.在数据库中,要记录每条数据是什么时候修改的,不需要应用程序去特意 ...
- Mysql设置创建时间字段和更新时间字段自动获取时间,填充时间
1.引言在实际开发中,每条数据的创建时间和修改时间,尽量不需要应用程序去记录,而由数据库获取当前时间自动记录创建时间,获取当前时间自动记录修改时间. 2.创建语句(1)–添加CreateTime 设置 ...
- Mysql数据库存储数据时间与系统获取时间不一致
最近进行项目开发,发现存在数据库内的数据和系统查询到的数据相差8小时 发现有2种比较合适的方法 (一)修改mysql服务的区时 centos进入mysql查看/修改时区 1.输入以下命令进入mysql ...
- moment.js获取本周本月本年的开始日期和结束日期
//获取本日 const startDate = moment().format('YYYY-MM-DD'); const startDate = moment().format('YYYY-MM-D ...
- JAVA获取本周 本月 本年 第一天和最后一天
/** * 日期工具类 */ public class DateUtils { /** * 获取今天 * @return String * */ public static String getTod ...
- js获取时间加多山天和时间戳转换成日期
function huoqu(){ var data = $("#data").val();//获取的时间 var day = $('#day').val();//往后 ...
- javaScript系列:js中获取时间new Date()详细介绍
var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)m ...
随机推荐
- React与Vue的相同与不同点
我们知道JavaScript是世界上最流行的语言之一,React和Vue是JS最流行的两个框架.所以要想前端的开发那么必须掌握好这两个框架. 那么这两个框架有什么不同呢? React 和 Vue 相同 ...
- H3C RIP路由表的更新
- java 综合示例代码
package javaenhance.src.cn.itcast.day3; import java.lang.reflect.Constructor; import java.lang.refle ...
- 2019-8-6-在-Gitlab-开启-MatterMost-机器人
title author date CreateTime categories 在 Gitlab 开启 MatterMost 机器人 lindexi 2019-8-6 19:42:1 +0800 20 ...
- Codevs 四子连棋 (迭代加深搜索)
题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步,黑白双 ...
- H3C查看、删除已经保存配置文件--用户图示(console)以上
<H3C>display saved-configuration //显示已经保存的内容 <H3C>reset saved-configuration //删除 ...
- dotnet 新项目格式与对应框架预定义的宏
在 sdk style 的项目格式支持使用多框架开发,此时需要在代码里面通过宏判断,在编译的时候执行不同的代码.本文告诉大家在框架里面对应的预定义的条件编译符有哪些 在让一个 csproj 项目指定多 ...
- Linux基础:认识Linux
1.Linux操作系统的特点 优点 (1)可靠性高:linux是基于Unix的概念开发出来的系统,拥有Unix的稳定且效率的特点.运行一年以上而不曾宕机.不必关机是很平常的事情 : (2)彻底 ...
- 聊聊多线程哪一些事儿(task)之 一
多线程,一个多么熟悉的词汇,作为一名程序员,我相信无论是从事什么开发语言,都能够轻轻松松说出几种实现多线程的方式,并且在实际工作种也一定用到过多线程,比如:定时器.异步作业等等,如果你说你没有用过多线 ...
- mac 访达修改所有文件夹默认排序方式
先说个误区,下图只能改变当前目录的排序方式 修改所有目录的排序方式需要在顶部的“显示” 中修改