JS的Date.setMonth()方法坑
一、场景复现
业务需求,查询时间需要设置为前一个月。
//辅助代码
Date.prototype.format = function(fmt)
{ //author: meizz var o = { "M+" : this.getMonth()+1, //月份 "d+" : this.getDate(), //日 "h+" : this.getHours(), //小时 "m+" : this.getMinutes(), //分 "s+" : this.getSeconds(), //秒 "q+" : Math.floor((this.getMonth()+3)/3), //季度 "S" : this.getMilliseconds() //毫秒 }; if(/(y+)/.test(fmt)) fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); for(var k in o) if(new RegExp("("+ k +")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))); return fmt;
} //正式代码
let date = new Date("2019-3-29");
date.setMonth(date.getMonth()-1);
alert(date.format('yyyy-MM'));
输出:
2019-03
期待输出2019-02
二、分析原因
在业务寻找问题的时候,测试输出date.format('yyyy-MM-dd'),看到的值为2019-03-01。从2019-03-01中我发现了原因,是因为2019-02-29此天不存在,故输出2019-03-01,这才导致了输出2019-03的问题。
正确设置上个月份的的方式应该为date.setMonth(date.getMonth()-1,1);使用setMonth(month,date)来进行修改,而不是使用setMonth(month)方法,避免出现此类问题。
JS的Date.setMonth()方法坑相关推荐
- js Date 函数方法
转载自 js Date 函数方法 var myDate = new Date();myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取 ...
- JS中 new Date() 各方法的用法
JS中 new Date() 各方法的用法 1.new Date() 参数篇 a.返回类型为国标时间, b.无参数时可以直接返回输出时的时间, c.有参数时则返回对应时间的国标时间, d.日期中间的符 ...
- js中text方法是啥意识_一盏茶的时间,快速捕获JS中常用的方法(细心整理,持续更新ing)...
不知不觉上班一周辽-趁着大好周末,小编挣扎着从床上爬起来,决定对前端日常编程中常用到的一些方法做一个系统的整合. 有些人或许会觉得忘了百度就完事儿,no no no!这事儿小编真的亲践过好多次,百度一 ...
- 获取JavaScript时间戳函数的方法和js时间戳转时间方法
文章目录 一.JavasCRIPT时间转时间戳 方法一:Date.now() 方法三:valueOf() 方法四:getTime() 方法五:Number 二.js时间戳转时间 方法一:生成'yyyy ...
- JS学习--Date对象
Date对象是 JavaScript 原生的时间库.它以1970年1月1日00:00:00作为时间的零点, 可以表示的时间范围是前后各1亿天(单位为毫秒). 一.普通函数的用法 Date对象可以作为普 ...
- JavaScript中的setMonth()方法的小问题 解决:setMonth(month, 1)
今天测试人员发现一个问题,从英文日期转化中文日期,月份总会有"6月"变为"7月".于是我在本地反复测试,发现如下规律:只要setMonth()的参数为小于31天 ...
- 苹果ios用js的Date()出现NaN问题解决办法
原文:苹果ios用js的Date()出现NaN问题解决办法 ios使用如下方法获得NaN,安卓手机则是正常计算,解决方法是换个这个时间的格式 new Date("2017-04-28 23: ...
- js入门·对象属性方法大总结
数组(Array):系列元素的有序集合: 详细演示请看:[js入门系列演示·数组 ] http://www.cnblogs.com/thcjp/archive/2006/08/04/467761.ht ...
- js常用字符串处理方法
function getMonth(){var date = new Date();var month=date.getMonth()+1;//当前月份$.ajax({type:"GET&q ...
最新文章
- 如何用fiddler抓取HTTPS的详细教程(附fiddler安装教学)
- C#操作Excel(搜集)
- java swing事件监听_Java swing(awt):事件监听机制的实现原理+简单示例
- laravel商品图片怎么展示_如何使用Laravel图片处理包intervention-image
- c语言编程算法精选,c语言经典程序算法【DOC精选】.doc
- c语言的局部指针,C中局部变量指针问题
- java获取某年度有多少周_java获取一年共有多少周
- element Descriptions 内容超出隐藏 Tooltip展示完整内容
- html特殊符号怎么输入法,特殊符号怎么打出来?电脑特殊符号输入方法
- 走进JavaWeb技术世界11:单元测试框架Junit
- 不知何时开学,接下来计划(罗勇军的浅谈程序设计竞赛的算法知识)
- 幼儿园观察记录的目的和目标_幼儿园观察目的是什么?
- [ScyllaHide] 04 ScyllaHide配置报错原因定位
- Redis之EXPIRE
- 谷歌浏览器怎么设置默认隐身模式启动
- 【“计算机科学与技术”专业小白成长系列】Linux Shell 编程 极简教程
- 项目管理小小知识点总结
- java中ioc作用_Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?
- 深度linux比ubuntukylin,linux ubuntukylin和deepin操作系统的比较及改进方向的建议
- 一张图认识URI和URL
热门文章
- java实用教程——组件及事件处理——DocumentEvent事件
- 135. 分发糖果002(贪心算法+思路+详解)
- 7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析
- Java 源程序与编译型运行区别
- [C++STL]queue容器用法介绍
- 天梯赛模拟 链表去重 (25 分)
- 网络编程-TCP/IP协议栈-TCP协议
- java 导入导出 插件_Java最优的Excel导入/导出工具开发,你用过吗?
- /usr/lib/sudo/sudoers.so must be only be writable by owner
- Hibernate基础