详解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 cookie的用法总结
Nov 18 Javascript
JS图片自动轮换效果实现思路附截图
Apr 30 Javascript
JS实现网站菜单拖拽移位效果的方法
Sep 24 Javascript
纯js代码制作的网页时钟特效【附实例】
Mar 30 Javascript
angularJS 如何读写缓冲的方法(推荐)
Aug 06 Javascript
关于JSON与JSONP简单总结
Aug 16 Javascript
JavaScript实现图片切换效果
Aug 12 Javascript
基于JavaScript实现五子棋游戏
Aug 26 Javascript
微信小程序radio组件使用详解
Jan 31 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
Dec 05 Javascript
图解javascript作用域链
May 27 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
Aug 01 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
5.PHP的其他功能
2006/10/09 PHP
如何把PHP转成EXE文件
2006/10/09 PHP
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
jQuery中offset()方法用法实例
2015/01/16 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
JS实现标签页切换效果
2017/05/04 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
python中关于日期时间处理的问答集锦
2013/03/08 Python
Python中字符串对齐方法介绍
2015/05/21 Python
python开发之for循环操作实例详解
2015/11/12 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
python 运用Django 开发后台接口的实例
2018/12/11 Python
Python2与Python3的区别实例总结
2019/04/17 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
青年教师培训方案
2014/02/06 职场文书
《将心比心》教学反思
2014/04/08 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
2015年党员个人工作总结
2015/05/13 职场文书
庆七一活动简报
2015/07/20 职场文书
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang
Python 中的Sympy详细使用
2021/08/07 Python
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android