js 在日期不满足的情况下就会自动加1个月,比如在当前时间为3月31号,传入1,1两个参数,预期结果为2月29日,但是结果输出了3月2日。就是如果不满就会溢出到下个月,后来看了api发现了setMonth有两个方法,另外一个是指定月份,指定某一天,就可以解决这个问题

我们先看看按天数去计算的代码,很简单

  1. var d = new Date();
  2.  
  3. d.setMonth(d.getMonth() +1);
  4.  
  5. alert(d.toLocaleString());

但是我们要求的是自然月,所以需要判断 是否2月 且是否是闰年 ,我们还需要另外一个方法去格式化时间 ,代码如下

  1. //求自然月日期
  2. function getMonthBeforeFormatAndDay(num, format, day) {
  3. var date = new Date();
  4. date.setMonth(date.getMonth() + (num*1), 1);
  5. //读取日期自动会减一,所以要加一
  6. var mo = date.getMonth() + 1;
  7. //小月
  8. if (mo == 4 || mo == 6 || mo == 9 || mo == 11) {
  9. if (day > 30) {
  10. day = 30
  11. }
  12. }
  13. //2月
  14. else if (mo == 2) {
  15. if (isLeapYear(date.getFullYear())) {
  16. if (day > 29) {
  17. day = 29
  18. } else {
  19. day = 28
  20. }
  21. }
  22. if (day > 28) {
  23. day = 28
  24. }
  25. }
  26. //大月
  27. else {
  28. if (day > 31) {
  29. day = 31
  30. }
  31. }
  32.  
  33. retureValue = date.format('yyyy' + format + 'MM' + format + day);
  34.  
  35. return retureValue;
  36. }
  37.  
  38. //JS判断闰年代码
  39. function isLeapYear(Year) {
  40. if (((Year % 4) == 0) && ((Year % 100) != 0) || ((Year % 400) == 0)) {
  41. return (true);
  42. } else { return (false); }
  43. }
  44.  
  45. //日期格式化
  46. Date.prototype.format = function (format) {
  47. var o = {
  48. "M+": this.getMonth() + 1, // month
  49. "d+": this.getDate(), // day
  50. "h+": this.getHours(), // hour
  51. "m+": this.getMinutes(), // minute
  52. "s+": this.getSeconds(), // second
  53. "q+": Math.floor((this.getMonth() + 3) / 3), // quarter
  54. "S": this.getMilliseconds()
  55. // millisecond
  56. }
  57.  
  58. if (/(y+)/.test(format))
  59. format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  60. for (var k in o)
  61. if (new RegExp("(" + k + ")").test(format))
  62. format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
  63. return format;
  64. }

这样就大功告成啦,网上好像没有这方面的代码,希望能帮到需要求自然月的同学

js 当前日期增加自然月的更多相关文章

  1. js计算当前日期上一个月和下一个月

    /**         * 获取上一个月         *         * @date 格式为yyyy-mm-dd的日期,如:2014-01-25         */        funct ...

  2. js获取上一个月、下一个月格式为yyyy-mm-dd的日期

    /** * 获取上一个月 * * @date 格式为yyyy-mm-dd的日期,如:2014-01-25 */ function getPreMonth(date) { var arr = date. ...

  3. js如何获取一个月的天数 data javascript

    js如何获取一个月的天数 function days(year,month){ var dayCount; now = new Date(year,month, 0); dayCount = now. ...

  4. js获取上一个月、下一个月

    /** * 获取上一个月 * * @date 格式为yyyy-mm-dd的日期,如:2014-01-25 */ function getPreMonth(date) { var arr = date. ...

  5. 用js获取周、月第一天和最后一天(转载)

    var getCurrentWeek = function (day) { var days = ["周日", "周一", "周二", &q ...

  6. Mycat 分片规则详解--自然月分片

    实现方式:按照月份列分片,每个自然月一个分片 优点:使数据按照每月来进行分时存储 缺点:由于数据是连续的,所以该方案不能有效的利用资源 配置示例: <tableRule name="s ...

  7. 【MySQL基础】Mysql获得当前日期的所在月的第一天

    Mysql获得当前日期的所在月的第一天 尊重劳动成果,请访问CSDN著者原文链接 http://blog.csdn.net/zixiao217/article/details/51908506 Ste ...

  8. js根据当前日期 求一个月前 半年前 一年前的日期

    function p(s) {        return s < 10 ? '0' + s: s;}getlastmonth() function getlastmonth() {    va ...

  9. moment.js 常用(几天前、相差几天、自然周、自然月)

    let pickDate = moment(this.searchForm.date); let firstDay = pickDate.day(0).format('YYYYMMDD');//上周天 ...

随机推荐

  1. Linux Kernel 3.11 正式版发布

    Linus 发布 了 3.11 版本的 Linux 内核.该版本值得关注的新特性有: Lustre 分布式文件系统.透明的 ARM 架构的大数据页支持:ARM64 上的 Xen 和 KVM 虚拟化:O ...

  2. Dynamic CRM 2013学习笔记(十八)根据主表状态用JS控制子表自定义按钮

    有时要根据主表的审批状态来控制子表上的按钮要不要显示,比如我们有一个需求审批通过后就不能再上传文件了. 首先打开Visual Ribbon Editor, 如下图,我们可以利用Enable Rules ...

  3. Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项

    本文是关于CRM 2013报表开发入门介绍,包括开发工具的使用,以及不同于普通Reporting service的相关注意事项. 一.CRM报表简介 报表有两种,SQL-based报表和Fetch-b ...

  4. Java Config 下的Spring Test方式

    用了三种方式: 1.纯手动取bean: package com.wang.test; import com.marsmother.commission.core.config.MapperConfig ...

  5. jenkins 插件Copy Artifacts + Artifacts to copy

    问题及遇到的错误: Unable to access upstream artifacts area /var/lib/jenkins/jobs/PROJECTNAME-Master-Branch/b ...

  6. JavaScript this 总结(含 ES6)

    本文主要总结自<JavaScript 语言精粹>.部分总结自<JavaScript 高级程序设计>以及自己的经验 四种调用模式 在 JavaScript 中,this 的值取决 ...

  7. paip 自定义输入法多多输入法词库的备份导出以及导入

    paip 自定义输入法词库的备份导出以及导入 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/ ...

  8. 强烈推荐android studio用的几个插件

    http://blog.csdn.net/liang5630/article/details/46366901 android studio常用插件,可极大简化开发,增强开发效率. 不懂安装studi ...

  9. c#之第四课

    数组: , , , , , , -, -, }; foreach (int i in numbers) { System.Console.WriteLine(i); }

  10. WPS 文字排版 标题回车后标题号自动增加

    飞思卡来互联网提供全球性的 看了看 风格的呵呵 合格否d合格否的 secure embedded嵌入式解 个国家和地区,注册了成千上万项专利,产品面向 物联网,汽车电子,消费电子,工业及网络设备等市 ...