日期实用程序(Date Utils)
Quasar提供了一组有用的函数,可以在大多数使用情况下轻松操作JS Date,而不需要像moment那样集成专用库的额外成本。
大多数Quasar日期函数将参数指定为一个Unix时间戳或一个表示日期(需要由原生JS的Date constructor解析)的字符串。 一些例子: 1497159857411
, Sun Jun 11 2017 08:44:42 GMT+0300
, 2017-06-16
.
返回值都是JS日期。
熟悉JS本地Date类,它非常强大,并且记住,你不需要像Momentjs这样的解决方案,它可以将数百个缩小的KB添加到你的包中。
帮助Tree-Shake
你会注意到所有的例子都会从Quasar中导入date
对象。 但是,如果您只需要一种方法,那么您可以使用ES6解构来帮助Tree Shaking嵌入该方法而不是所有的date
。
addToDate()
的例子:// 我们导入所有的`date`
import { date } from 'quasar'
// 解构只保留需要的东西
const { addToDate } = date
let newDate = addToDate(new Date(), { days: 7, months: 1 })
显示格式
它接收一串令牌并用相应的日期值替换它们:import { date } from 'quasar'
let timeStamp = Date.now()
let formattedString = date.formatDate(timeStamp, 'YYYY-MM-DDTHH:mm:ss.SSSZ')
对于i18n,您可以使用第三个参数:let formattedString = date.formatDate(timesStamp, 'MMMM - dddd', {
dayNames: ['Duminica', 'Luni', /* 以及所有其余的日子 - 记得从星期天开始*/],
monthNames: ['Ianuarie', 'Februarie', /* 和所有其余的几个月 */]
})
可用的格式标记:
单位 | 可用格式 |
---|---|
年份 |
|
月 |
|
季 |
|
月的一天 |
|
年的一天 |
|
星期几 |
|
星期几 (ISO) |
|
年的一周 |
|
小时 |
|
分钟 |
|
秒 |
|
分数秒 |
|
时区偏移 |
|
AM/PM |
|
Unix时间戳 |
|
操作日期
创建
尝试使用原生JS Date类创建日期,如下所示:let date = new Date();
以下方法仅仅是一个封装,可以帮助您在有年份、月份或秒等情况下获取到当前时间。
import { date } from 'quasar' |
您可以传递第三个参数(布尔值)来设置UTC时间(true)而不是本地时间。
提供的对象字面值可以包含以下键(都是可选的):
Key | 说明 |
---|---|
milliseconds |
为日期/时间的毫秒部分 |
seconds |
为日期/时间的秒部分 |
minutes |
为日期/时间的分钟部分 |
hours |
用于日期/时间的小时部分 |
day |
为日期/时间的日期部分 |
month |
为日期/时间的月份部分 |
year |
为日期/时间的年份部分 |
验证
要检查日期字符串是否有效,请使用:import { date } from 'quasar'
let dateString = 'Wed, 09 Aug 1995 00:00:00 GMT'
if (date.isValid(dateString)) {
// 用dateString做一些事情
}
加/减
在日期中添加/减去一些持续时间,请使用:import { date } from 'quasar'
let newDate = new Date(2017, 2, 7)
newDate = date.addToDate(newDate , { days: 7, months: 1 })
// `newDate ` 现在是 2017-3-14 00:00:00
newDate = date.subtractFromDate(newDate , { hours: 24, milliseconds: 10000 })
// `newDate ` 现在是 2017-3-12 23:59:50
提供的对象字面值可以包含以下键(都是可选的):
Key | 说明 |
---|---|
milliseconds |
持续几毫秒 |
seconds |
持续几秒 |
minutes |
持续几分钟 |
hours |
持续几小时 |
days |
持续几天 |
month |
持续几个月 |
year |
持续几年 |
设置日期/时间
设定日期/时间的指定单位:import { date } from 'quasar'
let newDate = new Date(2017, 10, 2)
let adjustedDate = date.adjustDate(newDate, { year: 2010, month: 2 })
// `adjustedDate` 是 2010-2-2
您可以传递第三个参数(布尔值)来设置UTC时间(true
)而不是本地时间。
提供的对象字面值可以包含以下键(都是可选的):
Key | 说明 |
---|---|
milliseconds |
为日期/时间的毫秒部分 |
seconds |
为日期/时间的秒部分 |
minutes |
为日期/时间的分钟部分 |
hours |
用于日期/时间的小时部分 |
days |
为日期/时间的日期部分 |
month |
为日期/时间的月份部分 |
year |
为日期/时间的年份部分 |
查询日期
最小/最大
要获取日期集(即数组)的最小/最大日期,请使用:import { date } from 'quasar'
let dates = [ new Date(2017, 6, 24), new Date(2017, 5, 20), new Date(2017, 6, 26) ]
let min = date.getMinDate(dates) // `min` 是 2017-5-20
let max = date.getMaxDate(dates) // `max` 是 2017-6-26
//或者只是使用多个参数:
let min = date.getMinDate(new Date(2017, 6, 24), new Date(2017, 5, 20), new Date(2017, 6, 26))
// `min` 是 2017-5-20
let max = date.getMaxDate(new Date(2017, 6, 24), new Date(2017, 5, 20), new Date(2017, 6, 26))
// `max` 是 2017-6-26
时间范围
要检查日期是否在给定的日期/时间范围内,请使用:import { date } from 'quasar'
let dateTarget = new Date()
let dateFrom = new Date()
let dateTo = new Date()
// **严格**(即专属范围)
if (date.isBetweenDates(dateTarget, dateFrom, dateTo)) {
// 用dateTarget做些事情
}
// including which margin you want
if (date.isBetweenDates(dateTarget, dateFrom, dateTo, { inclusiveFrom: true, inclusiveTo: true })) {
// 用dateTarget做些事情
}
要在给定的日期/时间范围内标准化日期,请使用:import { date } from 'quasar'
let newDate = new Date()
let dateMin = new Date(2010, 2, 23)
let dateMax = new Date(2012, 4, 12)
let dateNormalized = date.getDateBetween(newDate, dateMin, dateMax)
// 如果在2010年2月23日至2012年4月12日之间则返回“newDate”; 如果小于`dateMin`则返回`dateMin`; 如果大于`dateMax`则返回`dateMax`
相等
检查两个日期的单位是否相等使用:import { date } from 'quasar'
let date1 = new Date(2017, 2, 5)
let date2 = new Date(2017, 3, 8)
let unit = 'year'
if (date.isSameDate(date1, date2, /* 可选 */ unit)) {
// true, 因为date1和date2的年份是相同的
}
单位参数可以省略,在这种情况下会发生完整的日期/时间比较,否则允许执行部分比较:
单位 | 说明 |
---|---|
second |
测试是否仅有相同的秒 |
minute |
测试是否仅有相同的分钟 |
hour |
测试是否仅有相同的小时 |
day |
测试是否仅有相同的天 |
month |
测试是否仅有相同的月份 |
year |
测试是否仅有相同的年 |
差异
要计算两个日期之间的差异,请使用:import { date } from 'quasar'
let date1 = new Date(2017, 4, 12)
let date2 = new Date(2017, 3, 8)
let unit = 'days'
let diff = date.getDateDiff(date1, date2, unit)
// `diff` 是 34 (天)
单位参数表示测量单位,如果未指定则默认为days
:
单位 | 说明 |
---|---|
second |
以秒为单位 |
minute |
以分钟为单位 |
hour |
以小时为单位 |
day |
以天为单位 |
month |
以月为单位 |
year |
以年为单位 |
日历
要获得给定日期对象是当年的第几周,请使用:import { date } from 'quasar'
let newDate = new Date(2017, 0, 4)
let week = date.getWeekOfYear(newDate) // `week` 是 1
要获得给定日期对象是当年的第几天,请使用:import { date } from 'quasar'
let newDate = new Date(2017, 1, 4)
let day = date.getDayOfYear(newDate) // `day` 是 35
要获取给定日期对象的星期数,请使用:import { date } from 'quasar'
let newDate = new Date(2017, 1, 9)
let day = date.getDayOfWeek(newDate) // `day` 是 4
要获取指定日期是当月的第几天:import { date } from 'quasar'
let newDate = new Date()
let days = date.daysInMonth(newDate) // e.g. 30
开始/结束时间
通过将原始日期对象设置为时间单位的开始来改变原始日期对象:import { date } from 'quasar'
let newDate = new Date(2000)
// 设定为2000年初(2000年1月1日00:00:00)
newDate = date.startOfDate(newDate, 'year')
// 设定为2000年底 (2000年12月31日, 23:59:59.999)
newDate = date.endOfDate(newDate, 'year')
第二个参数表示要重置为的单位(开始或结束):
单位 | 说明 |
---|---|
second |
重置为秒 |
minute |
重置为分钟 |
hour |
重置为小时 |
day |
重置为天数 |
month |
重置为月份 |
year |
重置为年 |
获取格式
import { date } from 'quasar' |
克隆日期
import { date } from 'quasar' |