详解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 相关文章推荐
Javascript String对象扩展HTML编码和解码的方法
Jun 02 Javascript
网易JS面试题与Javascript词法作用域说明
Nov 09 Javascript
jQuery实现单行文字间歇向上滚动源代码
Jun 02 Javascript
简单讲解AngularJS的Routing路由的定义与使用
Mar 05 Javascript
Javascript Function.prototype.bind详细分析
Dec 29 Javascript
微信小程序之滚动视图容器的实现方法
Sep 26 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
Oct 17 Javascript
详解RequireJs官方使用教程
Oct 31 Javascript
element el-input directive数字进行控制
Oct 11 Javascript
angularjs http与后台交互的实现示例
Dec 21 Javascript
ES6 let和const定义变量与常量的应用实例分析
Jun 27 Javascript
JavaScript实现图片放大镜效果
Jun 27 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中static,const与define的使用区别
2013/06/18 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
2007/03/08 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
redux中间件之redux-thunk的具体使用
2018/04/17 Javascript
菊花转动的jquery加载动画效果
2018/08/19 jQuery
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
使用Mock.js生成前端测试数据
2020/12/13 Javascript
Python socket编程实例详解
2015/05/27 Python
Python冲顶大会 快来答题!
2018/01/17 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
2018/12/13 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
Django视图类型总结
2021/02/17 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
Linux开机引导的步骤是什么
2015/10/19 面试题
如何写一份好的自荐信
2014/01/02 职场文书
党员干部承诺书范文
2014/03/25 职场文书
元旦联欢会主持词
2014/03/26 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
复兴之路观后感
2015/06/02 职场文书
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js