在平常项目开发过程中,经常会遇到需要在JavaScript中处理时间的情况,无非两种(1,逻辑处理  2,格式转换处理)。当然要说相关技术博,园子里闭着眼睛都能抓一把,但是我要做的是:既然有幸被我碰到了,就要尽可能的分析转化为自己最适合自己的东西,成为自己知识库的一部分;同时希望能帮助有需要的同学解决遇到的相关小问题。

  时间逻辑处理

   此类型常用需求为:推算几个月后(前)的今天的日期。

  1. /**
  2. *获取几个月前的输入日期
  3. *{param:DateTime} date 输入日期(YYYY-MM-DD)
  4. *{param:number } monthNum 月数
  5. */
  6. GetPreMonthDay: function (date,monthNum)
  7. {
  8. var dateArr = date.split('-');
  9. var year = dateArr[0]; //获取当前日期的年份
  10. var month = dateArr[1]; //获取当前日期的月份
  11. var day = dateArr[2]; //获取当前日期的日
  12. var days = new Date(year, month, 0);
  13. days = days.getDate(); //获取当前日期中月的天数
  14. var year2 = year;
  15. var month2 = parseInt(month) - monthNum;
  16. if (month2 <=0) {
  17. year2 = parseInt(year2) - parseInt(month2 / 12 == 0 ? 1 : parseInt(month2) / 12);
  18. month2 = 12 - (Math.abs(month2) % 12);
  19. }
  20. var day2 = day;
  21. var days2 = new Date(year2, month2, 0);
  22. days2 = days2.getDate();
  23. if (day2 > days2) {
  24. day2 = days2;
  25. }
  26. if (month2 < 10) {
  27. month2 = '0' + month2;
  28. }
  29. var t2 = year2 + '-' + month2 + '-' + day2;
  30. return t2;
  31. }
  1.    /**
  2. *获取下一个月的输入日期
  3. *{param:DateTime} date 输入日期(YYYY-MM-DD)
  4. *{param:number } monthNum 月数
  5. */
  6. GetNextMonthDay: function (date, monthNum)
  7. {
  8. var dateArr = date.split('-');
  9. var year = dateArr[0]; //获取当前日期的年份
  10. var month = dateArr[1]; //获取当前日期的月份
  11. var day = dateArr[2]; //获取当前日期的日
  12. var days = new Date(year, month, 0);
  13. days = days.getDate(); //获取当前日期中的月的天数
  14. var year2 = year;
  15. var month2 = parseInt(month) + parseInt(monthNum);
  16. if (month2 >12) {
  17. year2 = parseInt(year2) + parseInt((parseInt(month2) / 12 == 0 ? 1 : parseInt(month2) / 12));
  18. month2 = parseInt(month2) % 12;
  19. }
  20. var day2 = day;
  21. var days2 = new Date(year2, month2, 0);
  22. days2 = days2.getDate();
  23. if (day2 > days2) {
  24. day2 = days2;
  25. }
  26. if (month2 < 10) {
  27. month2 = '0' + month2;
  28. }
  29.  
  30. var t2 = year2 + '-' + month2 + '-' + day2;
  31. return t2;
  32. }

测试效果:

  发没发现有个问题,通过29日来推,前后都会是29。 1月31号推到二月就是2月29(因为2月就29天)。

  那么这种逻辑对于有些需求来说就得根据实际情况变动一下。譬如:我想缴纳预存一个月的费用。当前我已经缴纳了2.1-2.29(2月一整月)的费用,预存一个月就应该是(3.1-3.31)。通过此逻辑得到却是3.1-3.29,所以使用请根据实际情况!

  

ps:别人博始终解决的别人的需求。再遇到新需求再更新吧.............

JavaScript时间处理之几个月前或几个月后的指定日期的更多相关文章

  1. ios 获取n个月前或者n个月后的日期

    NSCalendar *calendar = [NSCalendar currentCalendar]; NSRange range = [calendar rangeOfUnit:NSDayCale ...

  2. Calendar计算一个月前的日期,踩坑记录

    错误示范:calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);//获取一个月前的今天这种写法假设传入的日期为2019-03-3 ...

  3. javascript 关于一周前一个月前的处理方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. js获取几个月前,几周前时间。

    /**  *  DK 命名空间  防止全局变量污染  */ var DK = {} ; /**  * 获取前几个月,默认为一个月,当前时间  * @author duke  * @date 格式为yy ...

  5. Java 求n天前的时间或者n月前的时间

    时间格式化 public static String DEFAULT_FORMATDATE = "yyyy-MM-dd"; 1.n天前的日期 /** * luyanlong * 默 ...

  6. [转]Java中一周前一个月前时间计算方法

    Java中一周前一个月前时间计算方法 在java语言中,用如下方法获取系统时间: Date date = new Date(); String year=new SimpleDateFormat(&q ...

  7. python 获取几小时之前,几分钟前,几天前,几个月前,及几年前的具体时间

    引入以下两个包: import datetime import arrow 具体代码 # import datetime # import arrow def getTime(self, flag,d ...

  8. (JavaScript) 时间转为几天前、几小时前、几分钟前

    // 时间戳转多少分钟之前 getDateDiff(dateTimeStamp) { // 时间字符串转时间戳 var timestamp = new Date(dateTimeStamp).getT ...

  9. Java中常用的获取从当前月开始的前第i个月、取结束时间与开始时间相差多少个月份等的方法

    @RunWith(SpringRunner.class) @SpringBootTest public class DateTest { @Test public void test(){ DateF ...

随机推荐

  1. 前端学PHP之面向对象系列第四篇——关键字

    × 目录 [1]public [2]protected [3]private[4]final[5]static[6]const[7]this[8]self[9]parent 前面的话 php实现面向对 ...

  2. Js的语法和循环

    1.蓝球弹起的高度 篮球从10米高的地方落下,每次弹起的高度是原来的0.3倍,问弹跳10次之后篮球的高度. <script type="text/javascript"> ...

  3. Create Volume 操作(Part I) - 每天5分钟玩转 OpenStack(50)

    前面已经学习了 Cinder 的架构和相关组件,从本节我们开始详细分析 Cinder 的各种操作,首先讨论 Cinder 如何创建 volume. Create 操作流程如下: 客户(可以是 Open ...

  4. windows server 注意windows的temp目录

    windows解压缩包.安装软件时,会生成一些临时文件存放在temp目录中,windows不会自动删除这些文件. 临时文件目录可以在环境变量中查看和配置 在工作机or个人PC机中中这个目录一般不会有什 ...

  5. 关于Repository、IUnitOfWork 在领域层和应用服务层之间的代码分布与实现

    本来早就准备总结一下关于Repository.IUnitOfWork之间的联系以及在各层中的分布,直到看到田园里的蟋蟀发表的文章:<DDD 领域驱动设计-谈谈 Repository.IUnitO ...

  6. CentOS初始化Mysql5.7密码

    /etc/init.d/mysql stopmysqld_safe --user=mysql --skip-grant-tables --skip-networking &mysql -u r ...

  7. Java内存模型深度解析:volatile--转

    原文地址:http://www.codeceo.com/article/java-memory-4.html Volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特 ...

  8. Opencv VideoCapture实时捕捉摄像头信息

    #include "opencv2/highgui/highgui.hpp" #include <iostream> using namespace cv; using ...

  9. iOS开发多线程篇—多线程简单介绍

    iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...

  10. VS 2010一步步开发windows服务(windows service)

    基于0起步来创建一个服务,做到简单的记录时间日志功能,其具体招行方法可自行添加. 1.创建服务 2.删除默认服务文件 3.添加自己的服务文件 4.更改启动项目 5. 引用 using System.T ...