需要知道的JS的日期的知识,都在这了

论坛 期权论坛 期权     
筑梦编程   2019-7-13 18:38   2792   0



  1. new Date('1988-03-21')
复制代码
这种方式方便且直观。
如果现在写的是
  1. 21-03-1988
复制代码
,我们可以毫不费力想表达的是1988年3月21日。但是如果用JS 编写21-03-1988,则会得到无效的日期。


                                                                                                                        
这是有原因的。
在世界的不同地方以不同的方式解释日期字符串。例如
  1. 11-06-2019
复制代码
  1. 2019年6月11日
复制代码
还是
  1. 2019年11月6日
复制代码
。你不能确定我指的是哪一个,除非你知道我正在使用的日期系统。
在JS中,如果要使用日期字符串参数,则需要使用全球都能接受的格式,其中一种格式是ISO 8601扩展格式。
  1. // ISO 8601 Extended format`YYYY-MM-DDTHH:mm:ss:sssZ`
复制代码
  1. [/code][img]https://201907.oss-cn-shanghai.aliyuncs.com/wc/1811847-10f55bcab591fd4762fb6c0b8eca74f5[/img]
  2. [code]new Date('2019-06-11')
复制代码

  1. [/code]
  2. [code]new Date('2019-06-11T00:00')
复制代码


使用日期字符串参数的创建的本地时间与UTC的比较可能是一个难以捕捉的错误。所以,建议不要使用日期字符串创建日期方式。
[/quote][h3]使用一系列的参数创建[/h3]最多可以传入七个参数来创建日期/时间。
  • 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。
    1. // 11th June 2019, 5:23:59am, Local Time new Date(2019, 5, 11, 5, 23, 59)
    复制代码

许多开发人员比较少用这种方式,因为它看起来很复杂,但它实际上非常简单。可以从左到右记忆:年、月、日、小时、分钟、秒和毫秒。

Date 中需要注意的地方
  1. Month
复制代码
是从
  1. 0
复制代码
开始的,如
  1. 1月=== 0,2月=== 1,3月=== 2
复制代码
,依此类推。
再来一些事件熟悉一下多个参数的用法


注意,使用参数创建的日期都是用本地时间
使用参数的还有一个好处是不会在本地时间和UTC之间混淆,如果需要UTC时间,请以这种方式创建UTC 日期:
  1. // 11th June 2019, 12am, UTC.new Date(Date.UTC(2019, 5, 11))使用时间戳来创建日期
复制代码
在JS中,时间戳是自1970年1月1日以来经过的毫秒数(1970年1月1日也称为Unix纪元时间)。根据我的经验,很少使用时间戳来创建日期,一般使用时间戳来比较不同的日期或者格式化日期,后面在讨论。

[h3]不带参数的形式创建日期[/h3]如果创建没有任何参数的日期,则会将日期设置为当前时间(以本地时间为单位)。
  1. new Date()
复制代码

[h3][/h3]
  1. const date = new Date(2019, 0, 23, 17, 23, 42)
复制代码
    1. [/code]
    2. [/list][img]https://201907.oss-cn-shanghai.aliyuncs.com/wc/1811847-941ecdd783f022b744cf2fed5bc9d786[/img]
    3. [list=1][*]
    4. [code]const d = new Date(2019, 0, 23) const year = d.getFullYear() // 2019 const date = d.getDate() // 2
    复制代码

因为星期和月份是从0开始的,所以我们可以创建一个映射表:
  1. 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月'}
复制代码
  1. [/code]由于月份是0开始的的,我们可以使用数组代替对象,结果一样:
  2. 要得到1月份,你需要
  3. [code]const monthIndex = d.getMonth()const monthName = months[monthIndex]console.log(monthName) // 1月
复制代码
  1. [/code]简化一下:
  2. [code]const monthName = months(d.getMonth())console.log(monthName) // 1月
复制代码
为了获取 星期四,还需要 做同样的事情:
  1. const days = [  '星期日',  '星期一',  '星期二',  '星期三',  '星期四',  '星期五',  '星期六']
复制代码
获取方式:
  1. const dayName = days[d.getDay()] // 星期四
复制代码
接着就产拼接起来。这是相对乏味的。
如果需要创建自定义格式的时间,可以使用以下方法
    1. getHours
    复制代码
    :获取当地时间获取小时数(0-23)。
    1. getMinutes
    复制代码
    :获取本地时间获取分钟(0-59)。
    1. getSeconds
    复制代码
    :获取本地时间获取秒数(0-59)。
    1. getMilliseconds
    复制代码
    :获取本地时间获取毫秒(0-999)。
[h1]日期的比较[/h1]比较日期的前后,可以直接使用
  1. >
复制代码
,
  1. =
复制代码
  1. {  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
复制代码
  1. [/code]如果只想检查两个日期是否在同一天,可以比较他们的[code]getFullYear
复制代码
  1. getMonth
复制代码
  1. getDate
复制代码
值。
  1. 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
复制代码
[h1]从另一个日期获取日期[/h1]有两种可能的情况,希望从另一个日期获得一个日期。
  • 设置另一个日期特定的日期/时间值
  • 从另一个日期添加/减去增量
[h3]设置另一个日期特定的日期/时间值[/h3]可以使用以下方法设置另一个日期的日期/时间:
    1. setFullYear
    复制代码
    : 设置年份
    1. setMonth
    复制代码
    :设置月份
    1. setDate
    复制代码
    :设置每月的某一天
    1. setHours
    复制代码
    :设置时
    1. setMinutes
    复制代码
    :设置分
    1. setSeconds
    复制代码
    :设置秒
    1. setMilliseconds
    复制代码
    :设置毫秒
例如,如果想将日期设置为每月15日,可以使用
  1. setDate(15)
复制代码
  1. const d = new Date(2019, 0, 10)d.setDate(15)console.log(d) // 15 January 2019
复制代码
[quote]注意:上面的
  1. setter
复制代码
方法会改变原始日期对象。在实际中,我们不应该改变对象,应该在新的日期对象上执行这些操作。
  1. 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
复制代码
  1. [/code][h3][b]从另一个日期添加/减去增量[/b][/h3]添加/减去增量有两种通用方法。第一种方法在Stack Overflow上更受欢迎,它简洁,但更难掌握。第二种方法更冗长,但更容易理解。
  2. 假设希望获得从今天起三天的日期。对于这个例子,假设今天是[code]2019年3月28日
复制代码

[h3]第一种方法[/h3]
  1. const today = new Date(2019, 2, 28)
复制代码
首先,我们创建一个新的Date对象,这样就不会改变原始日期
  1. const finalDate = new Date(today)
复制代码
接下来,我们需要知道要更改的值。因为我们要改变日期,所以我们可以用
  1. getDate
复制代码
获得日期
  1. const currentDate = today.getDate()
复制代码
因为获取三天后的日期,所以需要在得到的日期加3
  1. setDate(currentDate + 3)
复制代码
完整代码:
  1. const today = new Date(2019, 2, 28)const finalDate = new Date(today)finalDate.setDate(today.getDate() + 3)console.log(finalDate) // 31 March 2019
复制代码
[h3]第二种方法[/h3]使用
  1. getFullYear
复制代码
  1. getMonth
复制代码
  1. getDate
复制代码
方法,更改对应的值, 然后,我们使用
  1. new Date
复制代码
创建最终日期。
  1. 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
复制代码
[h1]自动日期校正[/h1]如果为
  1. Date
复制代码
提供一个超出其可接受范围的值,JS 将自动重新计算日期。
如下所示,假设我们把日期定在2019年3月33日,日历上没有33日,JS 会自动将
  1. 3月33日
复制代码
调整为
  1. 4月2日
复制代码



这意味着在创建增量时无需担心计算分钟,小时,天,月等,JavaScript会自动处理。

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。



公众号ID:tzbc666

有趣的灵魂在等你长按扫码可关注

点个好看和转发也是一种支持哟!
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:75
帖子:15
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP