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)方法,避免出现此类问题。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系

我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难。有意思的是Web服务器/Web容器/Web应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现。本文将带读者对这四个相似概念如何区分。 1.1. Web服务器概念与基本原理 1.1.1. Web服…

bladex实现单点登录

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 前言 现在是:2022年4月17日16:19:51 在实际开发中,有时候我们有这样的需求,即,一个体系中的用户是共通的,比如统一体系下&#…

POJ1179,P4342-[IOI1998]Polygon【区间dp】

正题 POJ题目链接:http://poj.org/problem?id1179 洛谷评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP4342 题目大意 一个数字环,每个数字之间有一个符号(或×" role="presentation" style="pos…

若依实现单点登录(解析请求链接中的参数做鉴权认证)

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 前言 现在是:2022年4月19日19:56:56 昨天写了个bladex的单点登录,回想起来还是比较复杂的,今天又收到了个在若依里面实现单点登录。具体是这样的:别的系…

git常用的指令

最近项目从svn迁入到git,常用的git指令需要用到 一、git仓库安装 git config --global user.name "user name" git config --global user.email "emailemail.com"#初始化 git init#加仓库 git remote add origin https://github.com/user/proje…

Docker打包 Asp.Net Core应用,在CentOS上运行

本文主要介绍下运用docker虚拟技术打包Asp.net core应用。 Docker作为一个开源的应用容器引擎,近几年得到广泛的应用,使用Docker我们可以轻松实现应用的持续集成部署,一次打包,到处运行。 开篇借用百科上对docker的介绍。 Docker …

若依实现系统单点登录(可绕过验证码)

“大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂”前言现在是:2022年4月19日19:56:56昨天写了个bladex的单点登录,回想起来还是比较复杂的,今天又收到了个在若依里面实现单点登录。具体是这样的:别的系…

POJ1015-Jury Compromise【01背包,dp】

正题 题目链接:http://poj.org/problem?id1015 题目大意 每个人有A值和B值,要求选M个人,使这M个人的|SumA−SumB||SumA−SumB|最小。 解题思路 我们用SumA−SumBSumA−SumB作为原本的价格,然后用fi,jfi,j表示已经选了i个人,Su…

JavaFX其他事件

一、其他事件 InputMethodEvent.InputMethodTextChanged 文本输入改变 ContextMenuEvent.CONTEXT_MENU_REQUESTED 上下文菜单请求 二、用法 node.setOnXX(event->{//do something });node.addEventFilter(XXEvent.XX, event -> {//do something});

springboot解析txt文件顺便加到数据库中(nohup文件)

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 前言 现在是:2022年4月20日13:33:23 以前是怎么都没想到,我需要在服务器的nohup文件中找记录,然后往数据库里面更新。具体因为啥不提了,说多…

ASP.Net Core 2.0中的Razor Page不是WebForm

随着.net core2.0的发布,我们可以创建2.0的web应用了。2.0中新东西的出现,会让我们忘记老的东西,他就是Razor Page。下面的这篇博客将会介绍ASP.Net Core 2.0中的Razor Page。 在ASP.Net Core 2.0新特点之一就是支持Razor Page。今天的Razor…

Ch5302-金字塔【区间dp】

正题 题目链接:http://contest-hunter.org:83/contest/0x50%E3%80%8C%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E3%80%8D%E4%BE%8B%E9%A2%98/5302%20%E9%87%91%E5%AD%97%E5%A1%94 题目大意 给出一个欧拉序(只要到达每一个结点就把他加进序列的那种,编号会重复),求有多…

常用公有云接入

一、云平台 1、AWS(亚马逊) 2、谷歌 3、AZURE(微软) 4、阿里 5、腾讯 6、华为 二、接入方式 1、REST API 2、SDK 三、云ECS 1、实例 2、系统盘 3、数据盘 4、网关 5、公有IP 6、共享带宽(阿里云)

记录几个部署项目常用的命令

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 查询运行项目的进程 ps -aux|grep farbeat 杀死进程 kill -9 1600336进入目录 cd /www/wwwroot/farbeat/查看文件 ls将日志输出在nohup文件中的方式启动项目(注意.jar文件的名字) nohup j…

C#最佳工具集合:IDE、分析、自动化工具等

C#是企业中广泛使用的编程语言,特别是那些依赖微软的程序语言。如果您使用C#构建应用程序,则最有可能使用Visual Studio,并且已经寻找了一些扩展来对您的开发进行管理。但是,这个工具列表可能会改变您编写C#代码的方式。 C#编程的…

jzoj1768,P2704,POJ1185-[NOI2001]炮兵阵地【状态压缩dp】

正题 POJ链接:http://poj.org/problem?id1185 jzoj链接:https://jzoj.net/senior/#main/show/1768 洛谷评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP2704 正题 每个炮兵攻击范围是上左下右各2格,高山地区不可以放炮兵,求所以…

常用公有云接入——AZURE

一、概念 1、订阅 可以使用订阅为组织内的团队提供访问开发环境(即测试、生产、开发、临时部署等)和项目的权限。针对每个应用程序环境创建不同的订阅,并为每个订阅分配不同的服务管理员帐户,这是保护每个环境安全的一个好方法。…

记录几个常用部署项目的命令,以备后用!

“大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂”查询运行项目的进程ps -aux|grep farbeat杀死进程kill -9 1600336进入目录cd /www/wwwroot/farbeat/查看文件ls将日志输出在nohup文件中的方式启动项目(注意.jar文件的名字)nohup java -…

分布式测试工具Beetle.DT的部署并进行HTTP,SQL,TCP压测

由于Beetle.DT是一个分布式压力测试工具,所以在使用上并不像普通工具那样安装运行这么简单;由于工具涉及到测试管理中心,节点和管理端等工具; 所以必须要进行相应的部署才能运行。接下来详解一下如果安装Beetle.DT并进行简单的HTT…

Ch4201-楼兰图腾【树状数组】

正题 题目链接:http://contest-hunter.org:83/contest/0x40%E3%80%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%BF%9B%E9%98%B6%E3%80%8D%E4%BE%8B%E9%A2%98/4201%20%E6%A5%BC%E5%85%B0%E5%9B%BE%E8%85%BE 题目大意 给若干个点,求可以得到/\和V的形状各多少个。 解…