Skip to content

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 (但都是無效日期)
})

注意事項

  1. 只檢查類型: isDate 只檢查值是否為Date對象,不檢查日期是否有效
  2. 無效日期: 即使Date對象表示無效日期,isDate 仍會返回true
  3. 類型保護: 在TypeScript中,這個函數可以作為類型保護使用
  4. 性能: 檢查操作很快,只是簡單的類型檢查
  5. 跨平台: 在所有JavaScript環境中都能正常工作

與其他方法的區別

  • instanceof Date: 功能相同,但 isDate 更簡潔
  • Object.prototype.toString.call(value) === '[object Date]': 更復雜但更可靠
  • isDate(): radash提供的簡潔API
  • typeof value === 'object' && value !== null && 'getTime' in value: 檢查Date方法

實際應用場景

  1. 表單驗證: 檢查用戶輸入是否為有效日期
  2. API處理: 驗證API響應中的日期字段
  3. 數據轉換: 在數據轉換過程中檢查日期類型
  4. 類型保護: 在TypeScript中提供類型安全
  5. 錯誤處理: 在日期處理函數中進行類型檢查

Released under the MIT License.