详解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和CSS速查手册
Aug 20 Javascript
jquery插件之easing 动态菜单
Aug 21 Javascript
jquery select(列表)的操作(取值/赋值)
Mar 16 Javascript
javascript 使用 NodeList需要注意的问题
Mar 04 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
May 19 Javascript
vue iview组件表格 render函数的使用方法详解
Mar 15 Javascript
详解使用jest对vue项目进行单元测试
Sep 07 Javascript
vue项目开发中setTimeout等定时器的管理问题
Sep 13 Javascript
js JSON.stringify()基础详解
Jun 19 Javascript
Vue的data、computed、watch源码浅谈
Apr 04 Javascript
vue 实现用户登录方式的切换功能
Apr 14 Javascript
写一个Vue loading 插件
Nov 09 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冒泡排序算法代码详细解读
2011/07/17 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
php去掉文件前几行的方法
2015/07/29 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
vue 之 css module的使用方法
2018/12/04 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
Python3中的2to3转换工具使用示例
2015/06/12 Python
python实现简单ftp客户端的方法
2015/06/28 Python
Python selenium文件上传方法汇总
2020/11/19 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
pycharm设置注释颜色的方法
2018/05/23 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
操行评语大全
2014/04/30 职场文书
触电现场处置方案
2014/05/14 职场文书
股权转让协议范本
2014/12/07 职场文书
优秀团队申报材料
2014/12/26 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python
Java 超详细讲解hashCode方法
2022/04/07 Java/Android
Python使用pyecharts控件绘制图表
2022/06/05 Python