setMonth的小坑

JavaScript中setMonth()方法的使用详解 javascript Date.setMonth()方法按照本地时间设置每月指定日期。 语法 Date.setMonth(monthValue[, dayValue]) 注:括号内外观和数据是可选的 下面是参数的详细信息:     monthValue : 从0到11的整数(表示个月份,从一月到十二月)。     dayValue : 从1到31的整数,代表一个月中的某天。     msValue : 一个数字0和999之间,表示毫秒。如果指定msValue参数,则还必须指定minutesValue和secondsValue。 如果不指定dayValue参数,那么使用从getD 立即下载

今天在发现一个我之前写的测试用例出现了错误,最后发现是对Date的setMonth方法使用不够理解,下面进行一下分享。

大家都知道setMoth就是设置Date对象的月份信息的,
MDN的示列代码如下

var event = new Date('August 19, 1975 23:15:30');

event.setMonth(3);

console.log(event.getMonth());
// expected output: 3

console.log(event);
// Sat Apr 19 1975 23:15:30 GMT+0100 (CET)
// (note: your timezone may vary)

而根据MDN文档的描述,其中第二个参数也就是设置日期的参数是可选的
下面我们进行一些新的尝试

var event = new Date('May 31, 2019 23:15:30');
event.setMonth( event.getMonth() - 1 );
console.log(event.getMonth());

以及Date.getMonth()的返回值是从0-11的,请问此时的输出是几?结果是4,而不是3,
而且event.toString()的输出结果是"Wed May 01 2019 23:15:30 GMT+0800 (China Standard Time)",也就是5月1号

其原因是,setMonth的第一个参数不是单纯的更改当前对象的月份。我个人猜测改方法会计算当前设置月份的值,与当前时间月份值之间相差的天数,再装换为毫秒数,以当前时间戳为基础加上这个相差的时间计算出新的时间。如果是这样的话,那么month的day的取值是随意的。

var event = new Date('May 31, 2019 23:15:30');
event.setMonth( 13 );
event.toString(); //"Mon Mar 02 2020 23:15:30 GMT+0800 (China Standard Time)"
event.setMonth(-1);
event.toString(); //Mon Dec 02 2019 23:15:30 GMT+0800 (China Standard Time)"
event.setMonth(0, 33);
event.toString(); //"Sat Feb 02 2019 23:15:30 GMT+0800 (China Standard Time)"
event.setMonth(12);
event.toString(); //"Thu Jan 02 2020 23:15:30 GMT+0800 (China Standard Time)"

参考文章:

  1. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth
MobaXterm远程连接频繁掉线?3个SSH保活设置让你告别断连烦恼 本文针对MobaXterm远程连接频繁掉线问题,提供了3个SSH保活设置方案。从基础的SSH心跳机制到进阶的会话超时调整,再到TCP层保活与代理优化,全方位解决断连烦恼。特别适合需要稳定远程连接的开发者和运维人员,有效提升工作效率。 阅读详情

相关推荐

LS-DYNA壳单元冲击仿真中的5个关键设置:以方管碰撞为例(含沙漏控制参数)

本文以方管碰撞为例,深入解析了LS-DYNA壳单元冲击仿真中的五个关键设置。重点探讨了沙漏控制参数(如IHQ=4)的选择逻辑、自接触算法优化、能量监控方法、材料模型(MAT_24)的真实应力-应变曲线与应变率效应设置,以及单元公式的选取。这些核心设置共同决定了仿真的精度与效率,是确保方管冲击仿真结果可靠性的基石。

salt的博客 625

【JS】使用setMonth()时遇到的坑

在业务需求中,需要时间一个连续翻页控件,获取每个月的开始时间和结束时间。 最开始的时候,使用 new Date()获取当前的月份为month,然后使用setMonth(month + 1),为下一个月的当前时间,setMonth(month -1),然后基本使用是没有问题的,但是在今天10月31的时候惊奇的发现,11月居然没有了? 原来setMonth(month + 1)并不是单纯的取到下...

渐墨深的博客 2624

STM32F407 BootLoader实战:从零搭建到OTA升级(附完整源码)

本文详细介绍了为STM32F407微控制器从零搭建BootLoader并实现稳定OTA升级的完整实战指南。内容涵盖Flash分区规划、链接脚本配置、核心跳转逻辑、中断向量表重定向、可靠的升级流程设计,并深入探讨了双备份与回滚机制以提升工业级可靠性。文章提供了可直接使用的代码框架,并分享了关键调试技巧,帮助开发者快速掌握STM32远程固件更新技术。

weixin_29192211的博客 440

setMonth()

setMonth() 是 JavaScript 中的一个函数,它用于设置 Date 对象中的月份。 使用方法如下: let date = new Date(); date.setMonth(2); // 设置月份为 3 月(注意,月份是从 0 开始计数的,即 0 代表 1 月,1 代表 2 月,以此类推) 它会修改 Date 对象的月份值,并返回修改后的毫秒数。 注意:如果设置的月份值超过了当...

weixin_42575505的博客 932

Ubuntu 24.04 LTS安装WPS Office 2025冬季版全攻略(附字体缺失解决方案)

本文提供了在Ubuntu 24.04 LTS系统上安装WPS Office 2025冬季版的完整指南,详细对比了dpkg、Snap和GUI三种安装方式的优劣。针对安装后常见的中文字体缺失、思源黑体粗细异常等核心问题,给出了从原理分析到手动补充字体库、修改字体配置文件的深度解决方案,确保WPS Office在Linux环境下获得最佳使用体验。

weixin_29284201的博客 619

基于QGIS的DEM地形数据精细化处理:从裁剪、合并到成果输出

本文详细介绍了使用QGIS进行DEM地形数据的精细化处理流程,包括数据获取、裁剪、合并及成果输出等关键步骤。通过实战技巧和注意事项,帮助用户高效处理地形数据,适用于GIS分析、三维建模等应用场景。

weixin_29093017的博客 450

new Date()的setMonth方法关于月底的坑

早上一来被测试提了个bug,时间选择器本来默认都是显示上个月时间的,今天变成了显示本月的时间。原来对于setMonth这个方法,在使用的时候是可能会出现问题的。

AM1n98的博客 809

ubuntu18.04安装Nvidia显卡驱动后黑屏及网络、蓝牙驱动消失的解决方案

ubuntu18.04安装Nvidia显卡驱动后黑屏及网络、蓝牙驱动消失的解决方案

weixin_40735291的博客 6618

setmonth_日期setMonth()方法以及JavaScript中的示例

setmonth JavaScript日期setMonth()方法 (JavaScript Date setMonth() method) setMonth() method is a Date class method, it is used to set the month to the Date object with a valid month value (between 0 to 11...

cumtb2002的博客 2003

RK3588平台开发系列讲解(SARADC篇)SARADC的工作流程

📢本篇将介绍SARADC的源码分析和工作流程。

内核笔记 3231

YOLO26涨点改进 | 独家创新,细节涨点改进篇 | CVPR 2025顶会 | YOLO26引入Mona即插即用模块, 含MoCAA和DyTMona二次创新改进,含多种创新改进高效发论文

本文给大家介绍Mona即插即用模块, 含MoCAA和DyTMona二次创新模块优化YOLO26模型。YOLO26引入 Mona通过引入多尺度视觉友好型卷积滤波器(如3x3、5x5、7x7深度卷积)和可伸缩归一化层来优化适配器设计,以更好地处理视觉信号并调节输入特征分布。YOLO26引入Mona即插即用模块, 含MoCAA和DyTMona二次创新改进,含多种创新改进高效发论文。适合目标检测、图像分割、图像分类等所有CV任务通用即插即用模块。

Ai缝合怪、助力小伙伴高效发论文 240

JS中日期方法setMonth的问题

在使用日期类的setMonth方法的时候, 遇到一个问题, 见如下代码:// 2016-01-31 var d = new Date(2016, 0, 31); // set month to February // also d.setMonth(d.getMonth() + 1); d.setMonth(1); // 2016/3/2 上午12:00:00 conso

开心就好的专栏 6952

从询价到回款:一篇讲透 SAP SD 销售与分销的实战入门指南

摘要: SAP SD(Sales and Distribution)模块是SAP ERP中管理销售与分销的核心组件,贯穿从订单到回款(Order-to-Cash)的全流程。其核心价值在于将销售业务结构化,通过主数据(客户、物料、定价)和交易单据(订单、交货、发票)实现流程可审计、可自动化。SD模块与物流(MM)、生产(PP)、财务(FI)深度集成,涵盖定价策略、信用控制、发运管理、国际贸易等复杂场景。关键设计包括条件技术(Condition Technique)实现灵活定价,单据流(Document Flo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 258

java日期的转化

public static Date toDate(int year, int month, int day) { Date d = new Date(); d = DateUtils.setYears(d, year); d = DateUtils.setMonths(d, month - 1); d = DateUtils.setDays(d, day); d =...

博“文”强识 163

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

javascript使用Date对象setMonth生成指定日期的时间戳时月份错误的问题

javascript Date对象使用

qzpm4399的博客 817

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JS 中使用 setMonth 和 setFullYear 方法获得的日期有误

js中的setMoth 和 setFullYear 方法得到得日期不是自己设置的日期

草木红的博客 1572

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

使用setMonth设置月末一天,日期自动更正到下一个月

在项目中对一个日期进行操作,使用了setMonth,比如2021-08-31,想设置为4月1日,但是结果会变成5月份,如下: let dateStart = new Date('2021-08-31') dateStart.setMonth(3) dateStart.setDate(1) console.log(dateStart)//得到结果是2021-05-01 为什么会这样,是因为先设置了月份,日期变成了2021-04-31,但是因为4月没有31号,所以会自动更正为2021-05-01,然后再运行s

weixin_52296487的博客 906

java_封装概念

public static void main(String[] args) { // 创建猫对象。 Cat cat = new Cat(); cat.name = "小花";// new Cat().month = 8;// cat.month = - 8; //The field Cat.month is not visible cat.setMonth(-8); //调用函...

weixin_30438813的博客 79

java setmonth_javascript方法setMonth设置2月份变成3月份的小问题

ant.design 4.x获取form表单的方式ant.design 4.x获取form表单的方式发布:2020-12-29 阅读(146)ant.design v5 and 中如何在class中使用umijs的useModel调用initialStateant.design v5 and 中如何在class中使用umijs的useModel调用initialState发布:2020-12-29...

weixin_42342882的博客 633

JavaScript中的setMonth()方法的小问题

      今天测试人员发现一个问题,从英文日期转化中文日期,月份总会有“6月”变为“7月”。于是我在本地反复测试,发现如下规律:只要setMonth()的参数为小于31天的月份时就会变为下一个月。       原因是:因为当前月份是31天,而设置的月份小于31天,就会把日期顺延。在setMonth的说明是这样的:setMonth 方法设置 Date 对象中用 本地时间表示的月份值。

mydeman的学习日志 3270

Java中Calendar类中month参数(月参数)的取值

Calendar类中常用的方法;month参数(月参数)较其他参数特殊,0表示1月。

transboundaryan' blog 1万+

(八)Java日期工具类DateUtils详解(一)

一、 对指定的日期新增年、月、周、日、小时、分钟、秒、毫秒 public static Date addDays(Date date, int amount) Date date = new Date(); System.out.println(DateUtil.dateToString(date, "yyyy-MM-dd HH:mm:ss"));

OceanSky的专栏 4万+

JavaScript setMonth(1) 得到的是3月份

发现:当日期小于31时,就会自动到下一个月份。 解决方法:将月份和天数一起设置。this.date.setMonth(this.month,1); 而不是先.setMonth(1); 再 this.date.setDate(1);这样的方法时错误的。 ...

chuan_zhang_ak的博客 1066

JavaScript中的setMonth()方法的小问题 解决:setMonth(month, 1)

今天测试人员发现一个问题,从英文日期转化中文日期,月份总会有“6月”变为“7月”。于是我在本地反复测试,发现如下规律:只要setMonth()的参数为小于31天的月份时就会变为下一个月。 原因是:因为当前月份是31天,而设置的月份小于31天,就会把日期顺延。在setMonth的说明是这样的: setMonth 方法 设置 Date 对象中用 本地时间表示的月份值...

weixin_33889665的博客 741

使用js的setMonth() 方法带来的问题

我使用了setMonth(),实现了获取当前月份以前的12个月的月份,测试后没有问题。代码如下: for ( var i = 0; i < 12; i++) { var d = new Date(); d.setMonth(d.getMonth()-i); var y = d.getFullYear(); var m = d.getMonth() + 1; m = (m ...

qq_23216467的博客 1555

javascript中 Date类setMonth后月份不准确问题及解决方案

假如此刻时间为:2020-01-30 let time = new Date().setMonth(month + 1) //此时time的月份会是3月 //因为2月没有30号会自动向后进一个月到3月 //解决办法: let time = new Date().setMonth(month + 1,1)

敲之的博客 1793
上一篇: React + Jest + Enzyme
下一篇: rgba转16进制
izwell
博客等级 码龄14年 16粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值