详解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 相关文章推荐
jQuery1.6 类型判断实现代码
Sep 01 Javascript
jQuery 一个图片切换的插件
Oct 09 Javascript
jquery在IE、FF浏览器的差别详细探讨
Apr 28 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
Dec 12 Javascript
详解JavaScript中undefined与null的区别
Mar 29 Javascript
Node.js中对通用模块的封装方法
Jun 06 Javascript
js实现图片点击左右轮播
Jul 08 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
Aug 31 Javascript
用window.onerror捕获并上报Js错误的方法
Jan 27 Javascript
jQuery验证插件validate使用方法详解
Sep 13 Javascript
浅谈Vue.js组件(二)
Apr 09 Javascript
JavaScript实现简单随机点名器
Nov 21 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/02/09 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
详解vue 项目白屏解决方案
2018/10/31 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
深入理解Python中装饰器的用法
2016/06/28 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
python 消费 kafka 数据教程
2019/12/21 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
python 8种必备的gui库
2020/08/27 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
骆驼官方商城:CAMEL
2016/11/22 全球购物
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
实习生个人找工作的自我评价
2013/10/30 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
美术社团活动总结
2014/06/27 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
民事赔偿协议书
2014/11/02 职场文书
合同范本之电脑出租
2019/08/13 职场文书