isDate
检查值是否为日期类型。
基础用法
typescript
import { isDate } from 'radash'
console.log(isDate(new Date())) // true
console.log(isDate('2023-01-01')) // false
console.log(isDate(1234567890)) // false
console.log(isDate(null)) // false
语法
typescript
function isDate(value: any): value is Date
参数
value
(any): 要检查的值
返回值
返回一个布尔值,如果值是Date对象则返回true,否则返回false。
示例
检查Date对象
typescript
import { isDate } from 'radash'
console.log(isDate(new Date())) // true
console.log(isDate(new Date('2023-01-01'))) // true
console.log(isDate(new Date(1234567890))) // true
console.log(isDate(new Date('invalid'))) // true (仍然是Date对象,只是无效)
检查非Date值
typescript
import { isDate } from 'radash'
console.log(isDate('2023-01-01')) // false
console.log(isDate('2023/01/01')) // false
console.log(isDate('2023.01.01')) // false
console.log(isDate('January 1, 2023')) // false
检查数字
typescript
import { isDate } from 'radash'
console.log(isDate(1234567890)) // false
console.log(isDate(0)) // false
console.log(isDate(-1234567890)) // false
console.log(isDate(3.14)) // false
检查其他类型
typescript
import { isDate } from 'radash'
console.log(isDate(null)) // false
console.log(isDate(undefined)) // false
console.log(isDate(true)) // false
console.log(isDate(false)) // false
console.log(isDate([])) // false
console.log(isDate({})) // false
console.log(isDate(() => {})) // false
console.log(isDate(/regex/)) // false
在函数中使用
typescript
import { isDate } from 'radash'
function formatDate(value: any): string {
if (isDate(value)) {
return value.toISOString()
}
return 'Invalid date'
}
console.log(formatDate(new Date())) // '2023-01-01T00:00:00.000Z'
console.log(formatDate('2023-01-01')) // 'Invalid date'
console.log(formatDate(1234567890)) // 'Invalid date'
在数组过滤中使用
typescript
import { isDate } from 'radash'
const mixedArray = [
new Date(),
'2023-01-01',
1234567890,
new Date('2023-01-01'),
'hello',
null
]
const dateArray = mixedArray.filter(isDate)
console.log(dateArray) // [Date, Date] (只包含Date对象)
类型保护
typescript
import { isDate } from 'radash'
function processValue(value: unknown) {
if (isDate(value)) {
// TypeScript知道这里的value是Date类型
console.log(value.getFullYear()) // 可以安全调用Date方法
console.log(value.toISOString())
} else {
console.log('Not a date:', value)
}
}
processValue(new Date()) // 输出年份和ISO字符串
processValue('2023-01-01') // 'Not a date: 2023-01-01'
验证表单输入
typescript
import { isDate } from 'radash'
function validateDateInput(input: any): boolean {
if (isDate(input)) {
return !isNaN(input.getTime()) // 检查是否为有效日期
}
return false
}
console.log(validateDateInput(new Date())) // true
console.log(validateDateInput(new Date('invalid'))) // false
console.log(validateDateInput('2023-01-01')) // false
console.log(validateDateInput(1234567890)) // false
处理API响应
typescript
import { isDate } from 'radash'
interface ApiResponse {
id: number
name: string
createdAt: any
updatedAt: any
}
function processApiResponse(response: ApiResponse) {
const processed = {
...response,
createdAt: isDate(response.createdAt) ? response.createdAt : new Date(response.createdAt),
updatedAt: isDate(response.updatedAt) ? response.updatedAt : new Date(response.updatedAt)
}
return processed
}
const response: ApiResponse = {
id: 1,
name: 'Test',
createdAt: new Date(),
updatedAt: '2023-01-01T00:00:00.000Z'
}
const processed = processApiResponse(response)
console.log(isDate(processed.createdAt)) // true
console.log(isDate(processed.updatedAt)) // true
检查无效日期
typescript
import { isDate } from 'radash'
// 这些仍然是Date对象,但表示无效日期
const invalidDates = [
new Date('invalid'),
new Date(''),
new Date('not a date'),
new Date(NaN)
]
invalidDates.forEach(date => {
console.log(isDate(date)) // true (都是Date对象)
console.log(isNaN(date.getTime())) // true (但都是无效日期)
})
注意事项
- 只检查类型:
isDate
只检查值是否为Date对象,不检查日期是否有效 - 无效日期: 即使Date对象表示无效日期,
isDate
仍会返回true - 类型保护: 在TypeScript中,这个函数可以作为类型保护使用
- 性能: 检查操作很快,只是简单的类型检查
- 跨平台: 在所有JavaScript环境中都能正常工作
与其他方法的区别
instanceof Date
: 功能相同,但isDate
更简洁Object.prototype.toString.call(value) === '[object Date]'
: 更复杂但更可靠isDate()
: radash提供的简洁APItypeof value === 'object' && value !== null && 'getTime' in value
: 检查Date方法
实际应用场景
- 表单验证: 检查用户输入是否为有效日期
- API处理: 验证API响应中的日期字段
- 数据转换: 在数据转换过程中检查日期类型
- 类型保护: 在TypeScript中提供类型安全
- 错误处理: 在日期处理函数中进行类型检查