js date 加一天_需要知道的JS的日期的知识,都在这了
new Date('1988-03-21')
这种方式方便且直观。
如果现在写的是21-03-1988
,我们可以毫不费力想表达的是1988年3月21日。但是如果用JS 编写21-03-1988,则会得到无效的日期。
这是有原因的。
在世界的不同地方以不同的方式解释日期字符串。例如11-06-2019
是2019年6月11日
还是 2019年11月6日
。你不能确定我指的是哪一个,除非你知道我正在使用的日期系统。
在JS中,如果要使用日期字符串参数,则需要使用全球都能接受的格式,其中一种格式是ISO 8601扩展格式。
// ISO 8601 Extended format`YYYY-MM-DDTHH:mm:ss:sssZ`
new Date('2019-06-11')
new Date('2019-06-11T00:00')
使用日期字符串参数的创建的本地时间与UTC的比较可能是一个难以捕捉的错误。所以,建议不要使用日期字符串创建日期方式。
使用一系列的参数创建
最多可以传入七个参数来创建日期/时间。
Year:4位数年份
Month:一年中的某月(0-11)
Day:每月的某天(1-31),如果省略,则默认为1。
Hour:一天中的小时(0-23),如果省略,则默认为0。
Minutes:分钟(0-59),如果省略,则默认为0。
Seconds:秒(0-59),如果省略,则默认为0。
Milliseconds:毫秒(0-999),如果省略,则默认为0。
// 11th June 2019, 5:23:59am, Local Time new Date(2019, 5, 11, 5, 23, 59)
许多开发人员比较少用这种方式,因为它看起来很复杂,但它实际上非常简单。可以从左到右记忆:年、月、日、小时、分钟、秒和毫秒。
Date 中需要注意的地方Month
是从0
开始的,如1月=== 0,2月=== 1,3月=== 2
,依此类推。
再来一些事件熟悉一下多个参数的用法
注意,使用参数创建的日期都是用本地时间
使用参数的还有一个好处是不会在本地时间和UTC之间混淆,如果需要UTC时间,请以这种方式创建UTC 日期:
// 11th June 2019, 12am, UTC.new Date(Date.UTC(2019, 5, 11))使用时间戳来创建日期
在JS中,时间戳是自1970年1月1日以来经过的毫秒数(1970年1月1日也称为Unix纪元时间)。根据我的经验,很少使用时间戳来创建日期,一般使用时间戳来比较不同的日期或者格式化日期,后面在讨论。
不带参数的形式创建日期
如果创建没有任何参数的日期,则会将日期设置为当前时间(以本地时间为单位)。
new Date()
const date = new Date(2019, 0, 23, 17, 23, 42)
const d = new Date(2019, 0, 23) const year = d.getFullYear() // 2019 const date = d.getDate() // 2
因为星期和月份是从0开始的,所以我们可以创建一个映射表:
const months = { 0: '1月', 1: '2月', 2: '3月', 3: '4月', 4: '5月', 5: '6月', 6: '7月', 7: '8月', 8: '9月', 9: '10月', 10: '11月', 11: '12月'}
由于月份是0开始的的,我们可以使用数组代替对象,结果一样:
要得到1月份,你需要
const monthIndex = d.getMonth()const monthName = months[monthIndex]console.log(monthName) // 1月
简化一下:
const monthName = months(d.getMonth())console.log(monthName) // 1月
为了获取 星期四,还需要 做同样的事情:
const days = [ '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
获取方式:
const dayName = days[d.getDay()] // 星期四
接着就产拼接起来。这是相对乏味的。
如果需要创建自定义格式的时间,可以使用以下方法
getHours
:获取当地时间获取小时数(0-23)。getMinutes
:获取本地时间获取分钟(0-59)。getSeconds
:获取本地时间获取秒数(0-59)。getMilliseconds
:获取本地时间获取毫秒(0-999)。
日期的比较
比较日期的前后,可以直接使用>
, <
, >=
和 <=
时行比较。
const earlier = new Date(2019, 0, 26)const later = new Date(2019, 0, 27)
console.log(earlier // true
比较两个日期是否一样,就比较麻烦,不能直接用 ==
或 ===
const a = new Date(2019, 0, 26)const b = new Date(2019, 0, 26)
console.log(a == b) // falseconsole.log(a === b) // false
可以getTime
获取它们的时间戳,用时间戳进行比较。
const isSameTime = (a, b) => { return a.getTime() === b.getTime()}
const a = new Date(2019, 0, 26)const b = new Date(2019, 0, 26)console.log(isSameTime(a, b)) // true
如果只想检查两个日期是否在同一天,可以比较他们的getFullYear
,getMonth
和getDate
值。
const isSameDay = (a, b) => { return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate()=== b.getDate()}
const a = new Date(2019, 0, 26, 10) // 26 Jan 2019, 10amconst b = new Date(2019, 0, 26, 12) // 26 Jan 2019, 12pmconsole.log(isSameDay(a, b)) // true
从另一个日期获取日期
有两种可能的情况,希望从另一个日期获得一个日期。
设置另一个日期特定的日期/时间值
从另一个日期添加/减去增量
设置另一个日期特定的日期/时间值
可以使用以下方法设置另一个日期的日期/时间:
setFullYear
: 设置年份setMonth
:设置月份setDate
:设置每月的某一天setHours
:设置时setMinutes
:设置分setSeconds
:设置秒setMilliseconds
:设置毫秒
例如,如果想将日期设置为每月15日,可以使用setDate(15)
const d = new Date(2019, 0, 10)d.setDate(15)
console.log(d) // 15 January 2019
注意:上面的
setter
方法会改变原始日期对象。在实际中,我们不应该改变对象,应该在新的日期对象上执行这些操作。
const d = new Date(2019, 0, 10)const newDate = new Date(d)newDate.setMonth(5)
console.log(d) // 10 January 2019console.log(newDate) // 10 June 2019
从另一个日期添加/减去增量
添加/减去增量有两种通用方法。第一种方法在Stack Overflow上更受欢迎,它简洁,但更难掌握。第二种方法更冗长,但更容易理解。
假设希望获得从今天起三天的日期。对于这个例子,假设今天是2019年3月28日
。
第一种方法
const today = new Date(2019, 2, 28)
首先,我们创建一个新的Date对象,这样就不会改变原始日期
const finalDate = new Date(today)
接下来,我们需要知道要更改的值。因为我们要改变日期,所以我们可以用getDate
获得日期
const currentDate = today.getDate()
因为获取三天后的日期,所以需要在得到的日期加3
setDate(currentDate + 3)
完整代码:
const today = new Date(2019, 2, 28)const finalDate = new Date(today)finalDate.setDate(today.getDate() + 3)
console.log(finalDate) // 31 March 2019
第二种方法
使用getFullYear
,getMonth
,getDate
方法,更改对应的值, 然后,我们使用new Date
创建最终日期。
const today = new Date(2019, 2, 28)
// Getting required valuesconst year = today.getFullYear()const month = today.getMonh()const day = today.getDate()
// Creating a new Date (with the delta)const finalDate = new Date(year, month, day + 3)
console.log(finalDate) // 31 March 2019
自动日期校正
如果为Date
提供一个超出其可接受范围的值,JS 将自动重新计算日期。
如下所示,假设我们把日期定在2019年3月33日,日历上没有33日,JS 会自动将3月33日
调整为4月2日
。
这意味着在创建增量时无需担心计算分钟,小时,天,月等,JavaScript会自动处理。
代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。
*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
公众号ID:tzbc666
有趣的灵魂在等你
长按扫码可关注
点个好看和转发也是一种支持哟!
js date 加一天_需要知道的JS的日期的知识,都在这了相关推荐
- js 获得明天0点时间戳_需要知道的JS的日期知识,都在这了
译文 | https://github.com/qq449245884/xiaozhi/issues/66原文 | https://css-tricks.com/everything-you-need ...
- js date 加一天_你不一定了解的js数据类型
上篇文章聊了js两种数据类型的区别以及基本数据类型,这篇文章主要聊一下js的引用数据类型.包装对象.js的强转换.隐性数据类型转换. 一.引用数据类型 在ECMAScript中,引用类型是一种数据结构 ...
- js date 加一天_开发效率创新高,只因收下了这波 JS 操作
各种业务开发都离不开对数据的处理,然而遇到的很多数据都是不好处理的.这个时候就需要寻求搜索引擎的帮助.这种方法效率是非常低下的,而且根据作者的个性不能保证其对自己的口味.因此这篇文字包含了一份 JS ...
- js 正则或_Web前端工程师要知道的JS 常用正则表达式
说起正则表达式,相信从事web前端开发的人一定很熟悉,正则表达式通常被用来检索.替换那些符合某个模式(规则)的文本,是web前端开发中经常会用到的.今天,就为大家分享JS常用的正则表达式以及创建正则表 ...
- 声场测试话筒_麦克风测试/使用时要知道的10个重要声学知识
麦克风测试/使用时要知道的10个重要声学知识 1.混响 声音在房间内衰减的方式是影响声音录制的重要因素.混响对声音的作用是两面的,可以更好也可以更坏,混响时间是其中重要的条件.混响时间指的是从声源停止 ...
- 声学工程师应知道的150个声学基础知识
和大家分享一下声学工程师应知道的150个声学基础知识. 注意,声学工程师和音频工程师可不是同一岗位,前者会更侧重于硬件,后者侧重于软件层面.但是关于声音的一些基础内容还是相同的,可以多多了解!!! 以 ...
- 声学工程师应知道的150个声学基础知识(全篇)
和大家分享一下声学工程师应知道的150个声学基础知识. 注意,声学工程师和音频工程师可不是同一岗位,前者会更侧重于硬件,后者侧重于软件层面.但是关于声音的一些基础内容还是相同的,可以多多了解!!! 以 ...
- 分享 14 个你必须知道的 JS 函数
英文 | https://javascript.plainenglish.io/you-must-understand-these-14-javasript-functions-1f4fa1c620e ...
- 云顶之弈怎么防止被机器人拉_云顶之弈:只有钻石玩家才知道的12个小技巧,都是干货!...
最近英雄联盟云顶之弈非常火爆,以前一些不上线好友的名字也纷纷亮起来了,而且放在他们名字上一看基本上都是在玩云顶之弈.笔者经常使用恶魔元素法师阵容,海岛枪剑阵容,四护卫阵容,终于非常幸运的上到了钻石段位 ...
- java用date加一个小时_在Java中添加n个小时到一个date?
检查日历类. 它有add方法(和其他一些),以允许时间操纵. 像这样的东西应该工作. Calendar cal = Calendar.getInstance(); // creates calenda ...
最新文章
- centos上tensorflow一键安装脚本
- python使用matplotlib可视化包含倒影的柱状图(bar plot with shadow)、配置rcParams坐标轴正确显示负号(-)
- DotNetCore跨平台~2.0提前发布喽
- 第二、三章:信息系统项目管理基础与立项管理-章节真题
- 主存块和cache块关系_Cache(直接相联)
- 自主生态再进一步,龙芯中科完成.NET3.1-LoongArch64平台研发
- Softmax loss, softmax, multinominal and logistic loss
- 《Python Cookbook 3rd》笔记(4.11):同时迭代多个序列
- 关于Unity中的Mesh Collider碰撞器
- 微信开发,自定义菜单不生效怎么办?重新关注也无效
- Unity下载安装及许可证获取教程
- 一个前端面试官的自白:Connecting the Dots
- 动态独享代理ip的简介。
- PHPProxy建立代理服务器
- 使用css3实现一个超浪漫的新年倒计时
- Comparator.comparing比较排序
- 七天时间从电脑小白变成编程高手
- Android 手机采集摄像头视频 socket 视频传输实时传播
- QT信号槽与connect的常见写法
- 20200829 tektronix TPS 2024 示波器 compactflash设置