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.