js日期计算及快速获取周、月、季度起止日

机缘巧合,这段接触了一下js,刚开始各种磕碰各种不顺手,一个日期计算都折腾我半天,积累了一些,赶紧码下:  

 1 var now = new Date();                                                //当前日期
 2 var nowDayOfWeek = (now.getDay() == 0) ? 7 : now.getDay() - 1;       //今天是本周的第几天。周一=0,周日=6
 3 var nowDay = now.getDate();                                          //当前日
 4 var nowMonth = now.getMonth();                                       //当前月值(1月=0,12月=11)
 5 var nowMonReal = now.getMonth() + 1;                                 //当前月实际数字
 6 var nowYear = now.getFullYear();                                     //当前年
 7 
 8 //日期+天
 9 function AddDays(d, n) {
10     var t = new Date(d);//复制并操作新对象,避免改动原对象
11     t.setDate(t.getDate() + n);
12     return t;
13 }
14 
15 //日期+月。日对日,若目标月份不存在该日期,则置为最后一日
16 function AddMonths(d, n) {
17     var t = new Date(d);
18     t.setMonth(t.getMonth() + n);
19     if (t.getDate() != d.getDate()) { t.setDate(0); }
20     return t;
21 }
22 
23 //日期+年。月对月日对日,若目标年月不存在该日期,则置为最后一日
24 function AddYears(d, n) {
25     var t = new Date(d);
26     t.setFullYear(t.getFullYear() + n);
27     if (t.getDate() != d.getDate()) { t.setDate(0); }
28     return t;
29 }
30 
31 //获得本季度的开始月份
32 function getQuarterStartMonth() {
33     if (nowMonth <= 2) { return 0; }
34     else if (nowMonth <= 5) { return 3; }
35     else if (nowMonth <= 8) { return 6; }
36     else { return 9; }
37 }
38 
39 //周一
40 function getWeekStartDate() {
41     return AddDays(now, -nowDayOfWeek);
42 }
43 
44 //周日。本周一+6天
45 function getWeekEndDate() {
46     return AddDays(getWeekStartDate(), 6);
47 }
48 
49 //月初
50 function getMonthStartDate() {
51     return new Date(nowYear, nowMonth, 1);
52 }
53 
54 //月末。下月初-1天
55 function getMonthEndDate() {
56     return AddDays(AddMonths(getMonthStartDate(), 1), -1);
57 }
58 
59 //季度初
60 function getQuarterStartDate() {
61     return new Date(nowYear, getQuarterStartMonth(), 1);
62 }
63 
64 //季度末。下季初-1天
65 function getQuarterEndDate() {
66     return AddDays(AddMonths(getQuarterStartDate(), 3), -1);
67 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

ExtJs学习笔记(3)_GridPanel[XML做数据源]

这一节,将学习到除了用JSON做GridPanel的数据源外,还可以使用XML 一。静态示例 1.xml文件内容: <?xml version="1.0...

2248
来自专栏hotqin888的专栏

MeritMS+jQuery.Gantt价值管理系统增加项目进度展示

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

2391
来自专栏用户2442861的专栏

Android游戏开发十日通(6)- 太空大战

http://blog.csdn.net/silangquan/article/details/16921035

1192
来自专栏Golang语言社区

Golang生产级可靠UDP库

kcp-go is a Production-Grade Reliable-UDP library for golang.

6352
来自专栏liulun

使用开源项目Alipay.AopSdk.Core完成支付宝网页登录

核心方法: public IActionResult UserInfoCallBackAli() { var alipa...

3687
来自专栏菩提树下的杨过

Silverlight Telerik控件学习:GridView双向绑定

做过WinForm数据库开发的人,一定有类似经历:DataGrid绑定后,如果允许行编辑,数据一顿修改后,想批量保存修改后的结果,通常是将DataGrid的所有...

2245
来自专栏HansBug's Lab

1455: 罗马游戏

1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 721  Solved: 272 [Subm...

30910
来自专栏王磊的博客

JSON.stringify转换Date不正确的解決方法

JSON.stringify转换Date不正确的原因:国际时区(UTC)和中国时区(GMT)的原因,东八区+8等于国际时区。 解决方法,重新Es5的Date.p...

2974
来自专栏函数式编程语言及工具

Akka(35): Http:Server side streaming

   在前面几篇讨论里我们都提到过:Akka-http是一项系统集成工具库。它是以数据交换的形式进行系统集成的。所以,Akka-http的核心功能应该是数据交换...

2245
来自专栏智能计算时代

Create a natural language classifier that identifies spam

With the advent of cognitive computing and smart machines, machine learning and ...

2896

扫码关注云+社区

领取腾讯云代金券