详解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 相关文章推荐
一些不错的js函数ajax
Aug 20 Javascript
JSON字符串和对象之间的转换详解
May 26 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
Aug 07 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
Jan 25 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
May 21 Javascript
微信jssdk用法汇总
Jul 16 Javascript
jquery判断对象是否为空并遍历对象的简单实例
Jul 26 Javascript
AngularJS入门教程之AngularJS 模板
Aug 18 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
Dec 17 Javascript
Vue.js 表单控件操作小结
Mar 29 Javascript
mpvue写一个CPASS小程序的示例
Sep 04 Javascript
微信小程序tabbar底部导航
Nov 05 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
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
php远程下载类分享
2016/04/13 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
vue中axios请求的封装实例代码
2019/03/23 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
Python中文件操作简明介绍
2015/04/13 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
学生干部的自我评价分享
2014/01/18 职场文书
文秘档案管理岗位职责
2014/03/06 职场文书
公司委托书格式范本
2014/09/16 职场文书
欢迎新生标语
2014/10/06 职场文书
2014年爱国卫生工作总结
2014/11/22 职场文书
个人委托函范文
2015/01/29 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
小学教师党员承诺书
2015/04/27 职场文书
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL
Go语言基础函数基本用法及示例详解
2021/11/17 Golang
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL
nginx常用配置conf的示例代码详解
2022/03/21 Servers
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python