Skip to content

ms

可以轻松地将各种时间格式转换为毫秒。

示例

ts
import { ms } from '@mgcloud/lib-utils'

ms('2 days')  // 172800000
ms('1d')      // 86400000
ms('10h')     // 36000000
ms('2.5 hrs') // 9000000
ms('2h')      // 7200000
ms('1m')      // 60000
ms('5s')      // 5000
ms('1y')      // 31557600000
ms('100')     // 100
ms('-3 days') // -259200000
ms('-1h')     // -3600000
ms('-200')    // -200

从毫秒转换

ts
ms(60000)             // "1m"
ms(2 * 60000)         // "2m"
ms(-3 * 60000)        // "-3m"
ms(ms('10 hours'))    // "10h"

完整时间格式

ts
ms(60000, { long: true })             // "1 minute"
ms(2 * 60000, { long: true })         // "2 minutes"
ms(-3 * 60000, { long: true })        // "-3 minutes"
ms(ms('10 hours'), { long: true })    // "10 hours"

输入格式(单位)

ts
type Years = 'years' | 'year' | 'yrs' | 'yr' | 'y'
type Months = 'months' | 'month' | 'mo'
type Weeks = 'weeks' | 'week' | 'w'
type Days = 'days' | 'day' | 'd'
type Hours = 'hours' | 'hour' | 'hrs' | 'hr' | 'h'
type Minutes = 'minutes' | 'minute' | 'mins' | 'min' | 'm'
type Seconds = 'seconds' | 'second' | 'secs' | 'sec' | 's'
type Milliseconds = 'milliseconds' | 'millisecond' | 'msecs' | 'msec' | 'ms'
type Unit = Years | Months | Weeks | Days | Hours | Minutes | Seconds | Milliseconds

这些格式可以是小写(minutes)、大写(MINUTES)或首字母大写(Minutes)。单位前可以有空格(2 minutes)也可以没有(2minutes)。

NOTE

如果您使用 parseStrict,大小写和空格会在类型层面强制执行。

如果没有传入单位(如 2),单位将默认为毫秒(Milliseconds)。支持小数输入值,如 0.5m-0.5m.5m-.5m

TypeScript 支持

在大多数情况下,这不需要您做任何特殊操作,但如果需要,您也可以导入 StringValue 类型。

ts
import { ms, type StringValue } from '@mgcloud/lib-utils'

// 使用导出的类型
function example(value: StringValue) {
  ms(value)
}

// 此函数只接受与 `ms` 兼容的字符串
example('1 h')

在此示例中,我们使用类型断言来强制转换 string

ts
import { ms, type StringValue } from '@mgcloud/lib-utils'

// 使用导出类型进行类型断言
function example(value: string) {
  try {
    // 字符串可能比 `ms` 接受的值"更宽",所以我们断言
    // 我们的 `value` 是 `StringValue` 类型。
    //
    // 需要注意的是,这可能很危险(见下文)。
    ms(value as StringValue)
  } catch (error: Error) {
    // 处理无效值产生的任何错误
    console.error(error)
  }
}

// 此函数将接受任何字符串,这可能导致错误
example('any value')

您也可以创建自定义模板字面量类型。

ts
import { ms } from '@mgcloud/lib-utils'

type OnlyDaysAndWeeks = `${number} ${'days' | 'weeks'}`

// 使用自定义模板字面量类型
function example(value: OnlyDaysAndWeeks) {
  // `value` 的类型比 `ms` 接受的值更窄,
  // 可以安全使用而无需强制转换。
  ms(value)
}

// 此函数只接受 "# days" 或 "# weeks"
example('5.2 days')

高级用法

辅助函数

可以单独导入 parseformat

ts
import { parse, format } from '@mgcloud/lib-utils'

parse('1h') // 3600000

format(2000) // "2s"

增强类型安全

如果您想对输入值进行严格的类型检查,可以使用 parseStrict

ts
import { parseStrict } from '@mgcloud/lib-utils'

parseStrict('1h') // 3600000

function example(s: string) {
  return parseStrict(str) // tsc 错误
}

导出方法

typescript
import {
  ms,
  parse,
  parseStrict,
  format,
} from '@mgcloud/lib-utils'

Source

Source