详解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_03_javascript全局观
Oct 11 Javascript
当前流行的JavaScript代码风格指南
Sep 10 Javascript
javascript几个易错点记录
Nov 26 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
Mar 04 Javascript
深入剖析JavaScript:Object类型
May 10 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
Aug 11 Javascript
使用Promise链式调用解决多个异步回调的问题
Jan 15 Javascript
原生javascript实现分页效果
Apr 21 Javascript
Node.js操作redis实现添加查询功能
May 25 Javascript
[js高手之路]单例模式实现模态框的示例
Sep 01 Javascript
详解性能更优越的小程序图片懒加载方式
Jul 18 Javascript
详解Vue的watch中的immediate与watch是什么意思
Dec 30 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中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
ParseInt函数参数设置介绍
2014/01/02 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
javascript中this指向详解
2016/04/23 Javascript
jQuery 弹出层插件(推荐)
2016/05/24 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
python打开文件并获取文件相关属性的方法
2015/04/23 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
pandas删除指定行详解
2019/04/04 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
2014年文明创建工作总结
2014/11/25 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
绵山导游词
2015/02/05 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
办公室卫生管理制度
2015/08/04 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS