详解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 相关文章推荐
学习ExtJS Column布局
Oct 08 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
jQuery 取值、赋值的基本方法整理
Mar 31 Javascript
javascript下拉框选项单击事件的例子分享
Mar 04 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
May 15 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
Nov 25 Javascript
js实现上传图片预览方法
Oct 25 Javascript
js转换对象为xml
Feb 17 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
Mar 29 Javascript
JavaScript用200行代码制作打飞机小游戏实例
Jun 21 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
Sep 07 Javascript
Layer+Echarts构建弹出层折线图的方法
Sep 25 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
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
PHP项目开发中最常用的自定义函数整理
2010/12/02 PHP
PHP获取Exif缩略图的方法
2015/07/13 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
laravel 获取某个查询的查询SQL语句方法
2019/10/12 PHP
JavaScript Prototype对象
2009/01/07 Javascript
ext 代码生成器
2009/08/07 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
vue路由权限校验功能的实现代码
2020/06/07 Javascript
python的三目运算符和not in运算符使用示例
2014/03/03 Python
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
恶意软件的定义
2014/11/12 面试题
extern是什么意思
2016/03/10 面试题
Linux的文件类型
2016/07/05 面试题
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
机械专业应届生求职信
2013/09/21 职场文书
小学生安全演讲稿
2014/04/25 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
借条如何写
2015/05/26 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript