详解JavaScript时间处理之几个月前或几个月后的指定日期


Posted in Javascript onDecember 21, 2016

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

时间逻辑处理

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

/**
 *获取几个月前的输入日期
 *{param:DateTime} date 输入日期(YYYY-MM-DD)
 *{param:number } monthNum 月数
 */
 GetPreMonthDay: function (date,monthNum)
 {
  var dateArr = date.split('-');
  var year = dateArr[0]; //获取当前日期的年份
  var month = dateArr[1]; //获取当前日期的月份
  var day = dateArr[2]; //获取当前日期的日
  var days = new Date(year, month, 0);
  days = days.getDate(); //获取当前日期中月的天数
  var year2 = year;
  var month2 = parseInt(month) - monthNum;
  if (month2 <=0) {
   year2 = parseInt(year2) - parseInt(month2 / 12 == 0 ? 1 : parseInt(month2) / 12);
   month2 = 12 - (Math.abs(month2) % 12);
  }
  var day2 = day;
  var days2 = new Date(year2, month2, 0);
  days2 = days2.getDate();
  if (day2 > days2) {
   day2 = days2;
  }
  if (month2 < 10) {
   month2 = '0' + month2;
  }
  var t2 = year2 + '-' + month2 + '-' + day2;
  return t2;
 }
/**
 *获取下一个月的输入日期
 *{param:DateTime} date 输入日期(YYYY-MM-DD)
 *{param:number } monthNum 月数
 */
 GetNextMonthDay: function (date, monthNum)
 {
  var dateArr = date.split('-');
  var year = dateArr[0]; //获取当前日期的年份
  var month = dateArr[1]; //获取当前日期的月份
  var day = dateArr[2]; //获取当前日期的日
  var days = new Date(year, month, 0);
  days = days.getDate(); //获取当前日期中的月的天数
  var year2 = year;
  var month2 = parseInt(month) + parseInt(monthNum);
  if (month2 >12) {
   year2 = parseInt(year2) + parseInt((parseInt(month2) / 12 == 0 ? 1 : parseInt(month2) / 12));
   month2 = parseInt(month2) % 12;
  }
  var day2 = day;
  var days2 = new Date(year2, month2, 0);
  days2 = days2.getDate();
  if (day2 > days2) {
   day2 = days2;
  }
  if (month2 < 10) {
   month2 = '0' + month2;
  }

  var t2 = year2 + '-' + month2 + '-' + day2;
  return t2;
 }

测试效果:

详解JavaScript时间处理之几个月前或几个月后的指定日期

详解JavaScript时间处理之几个月前或几个月后的指定日期

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Extjs学习笔记之二 初识Extjs之Form
Jan 07 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
Sep 14 Javascript
面向对象设计模式的核心法则
Nov 10 Javascript
简洁实用的BootStrap jQuery手风琴插件
Aug 31 Javascript
浅谈js内置对象Math的属性和方法(推荐)
Sep 19 Javascript
Node.js 异步异常的处理与domain模块解析
May 10 Javascript
详解如何用typescript开发koa2的二三事
Nov 13 Javascript
vue数据操作之点击事件实现num加减功能示例
Jan 19 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
Oct 21 Javascript
JavaScript原型式继承实现方法
Nov 06 Javascript
修改Vue打包后的默认文件名操作
Aug 12 Javascript
HTML+VUE分页实现炫酷物联网大屏功能
May 27 Vue.js
详解前端自动化工具gulp自动添加版本号
Dec 20 #Javascript
详解Vue.js动态绑定class
Dec 20 #Javascript
浅谈Angular的$q, defer, promise
Dec 20 #Javascript
BootStrapTable服务器分页实例解析
Dec 20 #Javascript
bootstrap实现每隔5秒自动轮播效果
Dec 20 #Javascript
bootstrap多种样式进度条展示
Dec 20 #Javascript
JS封装通过className获取元素的函数示例
Dec 20 #Javascript
You might like
PHP 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
php Ubb代码编辑器函数代码
2012/07/05 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
php单文件版在线代码编辑器
2015/03/12 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
示例vue 的keep-alive缓存功能的实现
2018/12/13 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现2014火车票查询代码分享
2014/01/10 Python
python生成随机验证码(中文验证码)示例
2014/04/03 Python
用python 制作图片转pdf工具
2015/01/30 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
2017/12/03 Python
Python统计单词出现的次数
2018/04/04 Python
django框架两个使用模板实例
2019/12/11 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
python自动点赞功能的实现思路
2020/02/26 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
个人自我鉴定
2013/11/07 职场文书
法人代表任命书范本
2014/06/05 职场文书
员工工作能力评语
2014/12/31 职场文书
朋友聚会开场白
2015/06/01 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js