new Date('1988-03-21')

这种方式方便且直观。

如果现在写的是21-03-1988,我们可以毫不费力想表达的是1988年3月21日。但是如果用JS 编写21-03-1988,则会得到无效的日期。

这是有原因的。

在世界的不同地方以不同的方式解释日期字符串。例如11-06-20192019年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的比较可能是一个难以捕捉的错误。所以,建议不要使用日期字符串创建日期方式。

使用一系列的参数创建

最多可以传入七个参数来创建日期/时间。

  1. Year:4位数年份

  2. Month:一年中的某月(0-11)

  3. Day:每月的某天(1-31),如果省略,则默认为1。

  4. Hour:一天中的小时(0-23),如果省略,则默认为0。

  5. Minutes:分钟(0-59),如果省略,则默认为0。

  6. Seconds:秒(0-59),如果省略,则默认为0。

  7. 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)

  1. 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()] // 星期四

接着就产拼接起来。这是相对乏味的。

如果需要创建自定义格式的时间,可以使用以下方法

  1. getHours:获取当地时间获取小时数(0-23)。

  2. getMinutes:获取本地时间获取分钟(0-59)。

  3. getSeconds:获取本地时间获取秒数(0-59)。

  4. 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

如果只想检查两个日期是否在同一天,可以比较他们的getFullYeargetMonthgetDate值。

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

从另一个日期获取日期

有两种可能的情况,希望从另一个日期获得一个日期。

  1. 设置另一个日期特定的日期/时间值

  2. 从另一个日期添加/减去增量

设置另一个日期特定的日期/时间值

可以使用以下方法设置另一个日期的日期/时间:

  1. setFullYear: 设置年份

  2. setMonth:设置月份

  3. setDate:设置每月的某一天

  4. setHours:设置时

  5. setMinutes:设置分

  6. setSeconds:设置秒

  7. 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

第二种方法

使用getFullYeargetMonthgetDate方法,更改对应的值, 然后,我们使用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的日期的知识,都在这了相关推荐

  1. js 获得明天0点时间戳_需要知道的JS的日期知识,都在这了

    译文 | https://github.com/qq449245884/xiaozhi/issues/66原文 | https://css-tricks.com/everything-you-need ...

  2. js date 加一天_你不一定了解的js数据类型

    上篇文章聊了js两种数据类型的区别以及基本数据类型,这篇文章主要聊一下js的引用数据类型.包装对象.js的强转换.隐性数据类型转换. 一.引用数据类型 在ECMAScript中,引用类型是一种数据结构 ...

  3. js date 加一天_开发效率创新高,只因收下了这波 JS 操作

    各种业务开发都离不开对数据的处理,然而遇到的很多数据都是不好处理的.这个时候就需要寻求搜索引擎的帮助.这种方法效率是非常低下的,而且根据作者的个性不能保证其对自己的口味.因此这篇文字包含了一份 JS ...

  4. js 正则或_Web前端工程师要知道的JS 常用正则表达式

    说起正则表达式,相信从事web前端开发的人一定很熟悉,正则表达式通常被用来检索.替换那些符合某个模式(规则)的文本,是web前端开发中经常会用到的.今天,就为大家分享JS常用的正则表达式以及创建正则表 ...

  5. 声场测试话筒_麦克风测试/使用时要知道的10个重要声学知识

    麦克风测试/使用时要知道的10个重要声学知识 1.混响 声音在房间内衰减的方式是影响声音录制的重要因素.混响对声音的作用是两面的,可以更好也可以更坏,混响时间是其中重要的条件.混响时间指的是从声源停止 ...

  6. 声学工程师应知道的150个声学基础知识

    和大家分享一下声学工程师应知道的150个声学基础知识. 注意,声学工程师和音频工程师可不是同一岗位,前者会更侧重于硬件,后者侧重于软件层面.但是关于声音的一些基础内容还是相同的,可以多多了解!!! 以 ...

  7. 声学工程师应知道的150个声学基础知识(全篇)

    和大家分享一下声学工程师应知道的150个声学基础知识. 注意,声学工程师和音频工程师可不是同一岗位,前者会更侧重于硬件,后者侧重于软件层面.但是关于声音的一些基础内容还是相同的,可以多多了解!!! 以 ...

  8. 分享 14 个你必须知道的 JS 函数

    英文 | https://javascript.plainenglish.io/you-must-understand-these-14-javasript-functions-1f4fa1c620e ...

  9. 云顶之弈怎么防止被机器人拉_云顶之弈:只有钻石玩家才知道的12个小技巧,都是干货!...

    最近英雄联盟云顶之弈非常火爆,以前一些不上线好友的名字也纷纷亮起来了,而且放在他们名字上一看基本上都是在玩云顶之弈.笔者经常使用恶魔元素法师阵容,海岛枪剑阵容,四护卫阵容,终于非常幸运的上到了钻石段位 ...

  10. java用date加一个小时_在Java中添加n个小时到一个date?

    检查日历类. 它有add方法(和其他一些),以允许时间操纵. 像这样的东西应该工作. Calendar cal = Calendar.getInstance(); // creates calenda ...

最新文章

  1. centos上tensorflow一键安装脚本
  2. python使用matplotlib可视化包含倒影的柱状图(bar plot with shadow)、配置rcParams坐标轴正确显示负号(-)
  3. DotNetCore跨平台~2.0提前发布喽
  4. 第二、三章:信息系统项目管理基础与立项管理-章节真题
  5. 主存块和cache块关系_Cache(直接相联)
  6. 自主生态再进一步,龙芯中科完成.NET3.1-LoongArch64平台研发
  7. Softmax loss, softmax, multinominal and logistic loss
  8. 《Python Cookbook 3rd》笔记(4.11):同时迭代多个序列
  9. 关于Unity中的Mesh Collider碰撞器
  10. 微信开发,自定义菜单不生效怎么办?重新关注也无效
  11. Unity下载安装及许可证获取教程
  12. 一个前端面试官的自白:Connecting the Dots
  13. 动态独享代理ip的简介。
  14. PHPProxy建立代理服务器
  15. 使用css3实现一个超浪漫的新年倒计时
  16. Comparator.comparing比较排序
  17. 七天时间从电脑小白变成编程高手
  18. Android 手机采集摄像头视频 socket 视频传输实时传播
  19. QT信号槽与connect的常见写法
  20. 20200829 tektronix TPS 2024 示波器 compactflash设置

热门文章

  1. 《OSPF和IS-IS详解》一2.4 理解内部BGP
  2. 谈论高并发(三)锁的一些基本概念
  3. 如何在WP7中使用自定义字体
  4. glob-parent Regular expression denial ofservice
  5. Redis 开发规范
  6. mapreduce数据压缩
  7. Linux命令格式及目录与文件常用命令
  8. Java springboot B2B2C o2o多用户商城 springcloud架构 (六)springboot整合mybatis
  9. 美国科技股昨日普遍下跌:华尔街受特朗普影响抛售科技股票
  10. 【cluvfy】集群验证工具cluvfy使用方法——stage