详解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 相关文章推荐
番茄的表单验证类代码修改版
Jul 18 Javascript
Javascript 判断函数类型完美解决方案
Sep 02 Javascript
如何使用Jquery获取Form表单中被选中的radio值
Aug 09 Javascript
JS实现向表格行添加新单元格的方法
Mar 30 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
Jan 04 Javascript
JavaScript设计模式之单例模式简单实例教程
Jul 02 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
May 02 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
Jul 11 Javascript
vue移动端使用canvas签名的实现
Jan 15 Javascript
vue中axios防止多次触发终止多次请求的示例代码(防抖)
Feb 16 Javascript
简单了解JavaScript弹窗实现代码
May 07 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
Nov 16 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
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
PHP children()函数讲解
2019/02/03 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
Python 爬虫图片简单实现
2017/06/01 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
情侣吵架检讨书
2014/02/05 职场文书
2014年清明节寄语
2014/04/03 职场文书
英语教师求职信
2014/06/16 职场文书
高中军训的心得体会
2014/09/01 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
2014年档案室工作总结
2014/12/01 职场文书
先进班组材料范文
2014/12/25 职场文书
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技