详解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 相关文章推荐
jquery select下拉框操作的一些说明
Apr 02 Javascript
jQuery中ajax的使用与缓存问题的解决方法
Dec 19 Javascript
js获取判断上传文件后缀名的示例代码
Feb 19 Javascript
javascript自动切换焦点控制效果完整实例
Feb 02 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 Javascript
Node.js实现发送邮件功能
Nov 06 Javascript
JavaScript中的高级函数
Jan 04 Javascript
原生JS进行前后端同构
Apr 22 Javascript
vue监听input标签的value值方法
Aug 27 Javascript
JS实现百度网盘任意文件强制下载功能
Aug 31 Javascript
Vue表单控件绑定图文详解
Feb 11 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
Sep 24 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 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
windows下开发并编译PHP扩展的方法
2011/03/18 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
jQuery的学习步骤
2011/02/23 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
js multiple全选与取消全选实现代码
2012/12/04 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
详解Python中映射类型的内建函数和工厂函数
2015/08/19 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
Python实现excel转sqlite的方法
2017/07/17 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
python实现简单俄罗斯方块
2020/03/13 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
Orlebar Brown官网:设计师泳裤和泳装
2020/12/08 全球购物
游戏商店:Eneba
2020/04/25 全球购物
公司副总经理任命书
2014/06/05 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
Python基础之数据结构详解
2021/04/28 Python
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电