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中提供類型安全
- 錯誤處理: 在日期處理函數中進行類型檢查