Quasar提供了一组有用的函数,可以在大多数使用情况下轻松操作JS Date,而不需要像Momentjs那样集成专用库的额外成本。
大多数Quasar日期函数将参数指定为一个Unix时间戳或一个表示日期(需要由原生JS的Date constructor解析)的字符串。 一些例子: 1497159857411
, Sun Jun 11 2017 08:44:42 GMT+0300
, 2017-06-16
.
返回值都是JS日期。
熟悉JS本地Date类,它非常强大,并且记住,你不需要像Momentjs这样的解决方案,它可以将数百个缩小的KB添加到你的包中。
TIP
除了UMD版本之外,Quasar日期实用程序包括tree shaking。
你会注意到所有的例子都会从Quasar中导入date
对象。 但是,如果您只需要一种方法,那么您可以使用ES6解构来帮助Tree Shaking嵌入该方法而不是所有的date
。
addToDate()
的例子:
// 我们导入所有的`date`
import { date } from 'quasar'
// 解构只保留需要的东西
const { addToDate } = date
const newDate = addToDate(new Date(), { days: 7, months: 1 })
TIP
有关UMD版本的使用,请参见此处.
显示格式
它接收一串令牌并用相应的日期值替换它们:
import { date } from 'quasar'
const timeStamp = Date.now()
const formattedString = date.formatDate(timeStamp, 'YYYY-MM-DDTHH:mm:ss.SSSZ')
对于i18n,您可以使用第三个参数:
const formattedString = date.formatDate(timeStamp, 'MMMM - dddd', {
days: ['Duminica', 'Luni', /* 以及所有其余的日子 - 记得从星期天开始*/],
daysShort: ['Dum', 'Lun', /* 以及所有其余的日子 - 记得从星期天开始 */],
months: ['Ianuarie', 'Februarie', /* 和所有其余的几个月 */],
monthsShort: ['Ian', 'Feb', /* 和所有其余的几个月 */]
})
可用的格式标记:
单位 | 可用格式 |
---|---|
年份 |
|
月 |
|
季 |
|
月的一天 |
|
年的一天 |
|
星期几 |
|
星期几 (ISO) |
|
年的一周 |
|
小时 |
|
分钟 |
|
秒 |
|
分数秒 |
|
时区偏移 |
|
AM/PM |
|
Unix时间戳 |
|
如果你想在掩码中插入字符串(包括[
和]
字符),请确保用[
和]
包围它们来转义,否则字符可能被解释为格式标记。
操作日期
创建
尝试使用原生JS Date类创建日期,如下所示:
const date = new Date();
以下方法仅仅是一个封装,可以帮助您在有年份、月份或秒等情况下获取到当前时间。
import { date } from 'quasar'
const newDate = date.buildDate({ year: 2010, date: 5, hours: 15, milliseconds: 123 })
您可以传递第二个参数(布尔值)来设置UTC时间(true)而不是本地时间。
提供的对象字面值可以包含以下键(都是可选的):
Key | 说明 |
---|---|
millisecond(s) | 为日期/时间的毫秒部分 |
second(s) | 为日期/时间的秒部分 |
minute(s) | 为日期/时间的分钟部分 |
hour(s) | 用于日期/时间的小时部分 |
day(s) /date | 为日期/时间的日期部分 |
month(s) | 为日期/时间的月份部分 |
year(s) | 为日期/时间的年份部分 |
验证
要检查日期字符串是否有效,请使用:
import { date } from 'quasar'
const 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 | 说明 |
---|---|
millisecond(s) | 持续几毫秒 |
second(s) | 持续几秒 |
minute(s) | 持续几分钟 |
hour(s) /date | 持续几小时 |
day(s) | 持续几天 |
month(s) | 持续几个月 |
year(s) | 持续几年 |
设置日期/时间
设定日期/时间的指定单位:
import { date } from 'quasar'
const newDate = new Date(2017, 10, 2)
const adjustedDate = date.adjustDate(newDate, { year: 2010, month: 2 })
// `adjustedDate` 是 2010-2-2
您可以传递第三个参数(布尔值)来设置UTC时间(true
)而不是本地时间。
提供的对象字面值可以包含以下键(都是可选的):
Key | 说明 |
---|---|
millisecond(s) | 为日期/时间的毫秒部分 |
second(s) | 为日期/时间的秒部分 |
minute(s) | 为日期/时间的分钟部分 |
hour(s) | 用于日期/时间的小时部分 |
day(s) /date | 为日期/时间的日期部分 |
month(s) | 为日期/时间的月份部分 |
year(s) | 为日期/时间的年份部分 |
查询日期
最小/最大
要获取日期集(即数组)的最小/最大日期,请使用:
import { date } from 'quasar'
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
//或使用数组
const 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
请注意,返回值是一个时间戳。
console.log(max) // 1497906000000
console.log(new Date(max)) // Wed Jul 26 2017 00:00:00 GMT+0300 (Eastern European Summer Time)
时间范围
要检查日期是否在给定的日期/时间范围内,请使用:
import { date } from 'quasar'
const dateTarget = new Date()
const dateFrom = new Date()
const dateTo = new Date()
// **严格**(即专属范围)
if (date.isBetweenDates(dateTarget, dateFrom, dateTo)) {
// 用dateTarget做些事情
}
// 包括你想要哪个margin
if (date.isBetweenDates(dateTarget, dateFrom, dateTo, { inclusiveFrom: true, inclusiveTo: true })) {
// 用dateTarget做些事情
}
// (Quasar v1.9.9+)
// 如果您只关心比较日期(年/月/日,而不考虑时间),
// 那么您可以向isBetweenDates()提示它,以便它可以获得最佳性能:
if (date.isBetweenDates(dateTarget, dateFrom, dateTo, { onlyDate: true })) {
// 对dateTarget做点什么
}
要在给定的日期/时间范围内标准化日期,请使用:
import { date } from 'quasar'
const newDate = new Date()
const dateMin = new Date(2010, 2, 23)
const dateMax = new Date(2012, 4, 12)
const dateNormalized = date.getDateBetween(newDate, dateMin, dateMax)
// 如果在2010年2月23日至2012年4月12日之间则返回“newDate”; 如果小于`dateMin`则返回`dateMin`; 如果大于`dateMax`则返回`dateMax`
相等
检查两个日期的单位是否相等使用:
import { date } from 'quasar'
const date1 = new Date(2017, 2, 5)
const date2 = new Date(2017, 3, 8)
const unit = 'year'
if (date.isSameDate(date1, date2, /* 可选 */ unit)) {
// true, 因为date1和date2的年份是相同的
}
单位参数可以省略,在这种情况下会发生完整的日期/时间比较,否则允许执行部分比较:
单位 | 说明 |
---|---|
second(s) | 测试是否仅有相同的秒 |
minute(s) | 测试是否仅有相同的分钟 |
hour(s) | 测试是否仅有相同的小时 |
day(s) /date | 测试是否仅有相同的天 |
month(s) | 测试是否仅有相同的月份 |
year(s) | 测试是否仅有相同的年 |
差异
要计算两个日期之间的差异,请使用:
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 | 以日历年为单位 |
日历
要获得给定日期对象是ISO格式的一年的第几周 ,请使用:
import { date } from 'quasar'
const newDate = new Date(2017, 0, 4)
const week = date.getWeekOfYear(newDate) // `week` is 1
要获得给定日期对象是当年的第几天,请使用:
import { date } from 'quasar'
const newDate = new Date(2017, 1, 4)
const day = date.getDayOfYear(newDate) // `day` 是 35
要获取给定日期对象的星期数,请使用:
import { date } from 'quasar'
const newDate = new Date(2017, 1, 9)
const day = date.getDayOfWeek(newDate) // `day` 是 4
要获取指定日期是当月的第几天:
import { date } from 'quasar'
const newDate = new Date()
const 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(s) | 重置为秒 |
minute(s) | 重置为分钟 |
hour(s) | 重置为小时 |
day(s) /`date | 重置为天数 |
month(s) | 重置为月份 |
year(s) | 重置为年 |
其他
获取格式
import { date } from 'quasar'
date.inferDateFormat(new Date()) // 'date'
date.inferDateFormat(35346363) // 'number'
date.inferDateFormat('Mon Feb 05 2018 23:05:29') // string
克隆日期
import { date } from 'quasar'
const newDate = new Date()
const clonedDate = date.clone(newDate)
date.addToDate(newDate, { days: 1 })
console.log(newDate.getDate() === clonedDate.getDate()) // false
提取日期
通过使用当前Quasar语言包设置的语言环境,允许您根据传递的格式将任何字符串解析为日期对象:
import { date } from 'quasar'
// 示例1
const date = date.extractDate('2019-10-29 --- 23:12', 'YYYY-MM-DD --- HH:mm')
// date 是一个新的 Date() 对象
// 示例 2
const date = date.extractDate('21/03/1985', 'DD/MM/YYYY')
// date 是一个新的 Date() 对象
使用可选的自定义区域设置:
import { date } from 'quasar'
const obj = date.extractDate('Month: Feb, Day: 11th, Year: 2018', '[Month: ]MMM[, Day: ]Do[, Year: ]YYYY', {
days: ['Duminica', 'Luni', /* 以及所有其余的日子 - 记得从星期天开始*/],
daysShort: ['Dum', 'Lun', /* 以及所有其余的日子 - 记得从星期天开始 */],
months: ['Ianuarie', 'Februarie', /* 和所有其余的几个月 */],
monthsShort: ['Ian', 'Feb', /* 和所有其余的几个月 */]
})
// date 是一个新的 Date() 对象