详解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 相关文章推荐
javascript实现的动态添加表单元素input,button等(appendChild)
Nov 24 Javascript
javascript 动态生成私有变量访问器
Dec 06 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
Jan 28 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
May 05 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
Sep 21 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
Feb 19 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
Apr 06 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 Javascript
js实现图片轮播效果学习笔记
Jul 26 Javascript
基于AngularJS实现表单验证功能
Jul 28 Javascript
9102年webpack4搭建vue项目的方法步骤
Feb 20 Javascript
javascript将扁平的数据转为树形结构的高效率算法
Feb 27 Javascript
详解前端自动化工具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实现的下载远程图片自定义函数分享
2015/01/28 PHP
php+jQuery+Ajax简单实现页面异步刷新
2016/08/08 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Python Mysql自动备份脚本
2008/07/14 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
django和vue实现数据交互的方法
2019/08/21 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
写自荐信的七个技巧
2013/10/15 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
财务管理专业自荐书
2014/09/02 职场文书
大学生简短的自我评价
2014/09/12 职场文书
教师读书活动心得体会
2016/01/14 职场文书
深度学习详解之初试机器学习
2021/04/14 Python
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技