详解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 相关文章推荐
ie focus bug 解决方法
Sep 03 Javascript
SyntaxHighlighter语法高亮插件使用说明
Aug 14 Javascript
javascript避免数字计算精度误差的方法详解
Mar 05 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
Jul 28 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
Jun 28 Javascript
AngularJS ng-blur 指令详解及简单实例
Jul 30 Javascript
JS正则替换去空格的方法
Mar 24 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
Jun 12 jQuery
js编写简单的聊天室功能
Aug 17 Javascript
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
分享vue.js devtools遇到一系列问题
Oct 24 Javascript
JavaScript实现图片放大预览效果
Nov 02 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数组应用之比较两个时间的相减排序
2008/08/18 PHP
php网站地图生成类示例
2014/01/13 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
Node.js 日志处理模块log4js
2016/08/28 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
Python和C/C++交互的几种方法总结
2017/05/11 Python
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
python爬取个性签名的方法
2018/06/17 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
python超时重新请求解决方案
2019/10/21 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
HTML5获取当前地理位置并在百度地图上展示的实例
2020/07/10 HTML / CSS
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
浅谈react路由传参的几种方式
2021/03/23 Javascript
工作会议主持词
2014/03/17 职场文书
日语专业求职信
2014/07/04 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
世界环境日活动总结
2015/02/11 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL
redis cluster支持pipeline的实现思路
2021/06/23 Redis
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android
windows11怎么查看wifi密码? win11查看wifi密码的技巧
2021/11/21 数码科技