这种方式方便且直观。
如果现在写的是,我们可以毫不费力想表达的是1988年3月21日。但是如果用JS 编写21-03-1988,则会得到无效的日期。
这是有原因的。
在世界的不同地方以不同的方式解释日期字符串。例如是还是。你不能确定我指的是哪一个,除非你知道我正在使用的日期系统。
在JS中,如果要使用日期字符串参数,则需要使用全球都能接受的格式,其中一种格式是ISO 8601扩展格式。
- // ISO 8601 Extended format`YYYY-MM-DDTHH:mm:ss:sssZ`
复制代码- [/code][img]https://201907.oss-cn-shanghai.aliyuncs.com/wc/1811847-10f55bcab591fd4762fb6c0b8eca74f5[/img]
- [code]new Date('2019-06-11')
复制代码
- [/code]
- [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。
- // 11th June 2019, 5:23:59am, Local Time new Date(2019, 5, 11, 5, 23, 59)
复制代码
许多开发人员比较少用这种方式,因为它看起来很复杂,但它实际上非常简单。可以从左到右记忆:年、月、日、小时、分钟、秒和毫秒。
Date 中需要注意的地方是从开始的,如,依此类推。
再来一些事件熟悉一下多个参数的用法
注意,使用参数创建的日期都是用本地时间
使用参数的还有一个好处是不会在本地时间和UTC之间混淆,如果需要UTC时间,请以这种方式创建UTC 日期:- // 11th June 2019, 12am, UTC.new Date(Date.UTC(2019, 5, 11))使用时间戳来创建日期
复制代码 在JS中,时间戳是自1970年1月1日以来经过的毫秒数(1970年1月1日也称为Unix纪元时间)。根据我的经验,很少使用时间戳来创建日期,一般使用时间戳来比较不同的日期或者格式化日期,后面在讨论。
[h3]不带参数的形式创建日期[/h3]如果创建没有任何参数的日期,则会将日期设置为当前时间(以本地时间为单位)。
[h3][/h3]
- const date = new Date(2019, 0, 23, 17, 23, 42)
复制代码- [/code]
- [/list][img]https://201907.oss-cn-shanghai.aliyuncs.com/wc/1811847-941ecdd783f022b744cf2fed5bc9d786[/img]
- [list=1][*]
- [code]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月'}
复制代码- [/code]由于月份是0开始的的,我们可以使用数组代替对象,结果一样:
- 要得到1月份,你需要
- [code]const monthIndex = d.getMonth()const monthName = months[monthIndex]console.log(monthName) // 1月
复制代码- [/code]简化一下:
- [code]const monthName = months(d.getMonth())console.log(monthName) // 1月
复制代码 为了获取 星期四,还需要 做同样的事情:- const days = [ '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
复制代码 获取方式:- const dayName = days[d.getDay()] // 星期四
复制代码 接着就产拼接起来。这是相对乏味的。
如果需要创建自定义格式的时间,可以使用以下方法
- :获取当地时间获取小时数(0-23)。
- :获取本地时间获取分钟(0-59)。
- :获取本地时间获取秒数(0-59)。
- :获取本地时间获取毫秒(0-999)。
[h1]日期的比较[/h1]比较日期的前后,可以直接使用,和- { 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
复制代码- [/code]如果只想检查两个日期是否在同一天,可以比较他们的[code]getFullYear
复制代码 ,和值。- 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]可以使用以下方法设置另一个日期的日期/时间:
- : 设置年份
- :设置月份
- :设置每月的某一天
- :设置时
- :设置分
- :设置秒
- :设置毫秒
例如,如果想将日期设置为每月15日,可以使用- const d = new Date(2019, 0, 10)d.setDate(15)console.log(d) // 15 January 2019
复制代码 [quote]注意:上面的方法会改变原始日期对象。在实际中,我们不应该改变对象,应该在新的日期对象上执行这些操作。 - 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
复制代码- [/code][h3][b]从另一个日期添加/减去增量[/b][/h3]添加/减去增量有两种通用方法。第一种方法在Stack Overflow上更受欢迎,它简洁,但更难掌握。第二种方法更冗长,但更容易理解。
- 假设希望获得从今天起三天的日期。对于这个例子,假设今天是[code]2019年3月28日
复制代码 。
[h3]第一种方法[/h3]- const today = new Date(2019, 2, 28)
复制代码 首先,我们创建一个新的Date对象,这样就不会改变原始日期- const finalDate = new Date(today)
复制代码 接下来,我们需要知道要更改的值。因为我们要改变日期,所以我们可以用获得日期- const currentDate = today.getDate()
复制代码 因为获取三天后的日期,所以需要在得到的日期加3完整代码:- 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]使用,,方法,更改对应的值, 然后,我们使用创建最终日期。- 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]如果为提供一个超出其可接受范围的值,JS 将自动重新计算日期。
如下所示,假设我们把日期定在2019年3月33日,日历上没有33日,JS 会自动将调整为。
这意味着在创建增量时无需担心计算分钟,小时,天,月等,JavaScript会自动处理。
代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。
*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
公众号ID:tzbc666
有趣的灵魂在等你长按扫码可关注
点个好看和转发也是一种支持哟! |
|