Skip to content

date

日期处理工具,包含日期解析、格式化、比较、时区等功能。

导入

typescript
import {
  isValidDate,
  dateParse,
  dateFormat,
  dateRelative,
  isLeapYear,
  isSameDateInYear,
  isSameDateInMonth,
  isSameDateInDay,
  isSameDateInHour,
  isSameDateInMinute,
  isSameDateInSecond,
  dateDaysInMonth,
  dateDaysInYear,
  weeksOfYear,
  weeksOfMonth,
  dateStartInSecond,
  dateStartInMinute,
  dateStartInHour,
  dateStartInDay,
  dateStartInWeek,
  dateStartInMonth,
  dateStartInYear,
  dateEndInSecond,
  dateEndInMinute,
  dateEndInHour,
  dateEndInDay,
  dateEndInWeek,
  dateEndInMonth,
  dateEndInYear,
  TimezoneDate,
  // 类型
  type DateLike,
  type DateValue,
  type DateRelativeTemplate,
  type DateRelativeTemplates,
  type TimezoneDateOptions,
  EWeekStart,
  // 常量
  DATE_SECOND_MS,
  DATE_MINUTE_MS,
  DATE_HOUR_MS,
  DATE_DAY_MS,
  DATE_MONTH_MS,
  DATE_YEAR_MS,
} from '@cloudcome/utils-core/date';

类型定义

DateLike

typescript
type DateLike = Date | TimezoneDate;

DateValue

typescript
type DateValue = number | string | DateLike;

DateRelativeTemplate

相对时间模板类型。

typescript
type DateRelativeTemplate = [
  number, // 时间差阈值(毫秒)
  string, // 时间差在阈值内的描述模板
  string, // 时间差超过阈值的描述模板
];

DateRelativeTemplates

相对时间模板数组类型。

typescript
type DateRelativeTemplates = DateRelativeTemplate[];

TimezoneDateOptions

时区日期配置选项。

typescript
type TimezoneDateOptions = {
  date?: DateValue;
  utcOffset?: number;
};

EWeekStart

typescript
enum EWeekStart {
  sunday = 0,
  monday = 1,
  tuesday = 2,
  wednesday = 3,
  thursday = 4,
  friday = 5,
  saturday = 6,
}

常量

常量描述
DATE_SECOND_MS10001 秒的毫秒数
DATE_MINUTE_MS60 * 10001 分钟的毫秒数
DATE_HOUR_MS60 * 60 * 10001 小时的毫秒数
DATE_DAY_MS24 * 60 * 60 * 10001 天的毫秒数
DATE_MONTH_MS30 * 24 * 60 * 60 * 10001 月的毫秒数(约)
DATE_YEAR_MS365 * 24 * 60 * 60 * 10001 年的毫秒数(约)

函数

isValidDate

判断是否为有效日期。

typescript
function isValidDate(unknown: unknown): unknown is Date | TimezoneDate;

参数

参数类型描述
unknownunknown要检查的值

返回值

unknown is Date | TimezoneDate - 是否为有效日期

示例

typescript
isValidDate(new Date()); // true
isValidDate(new Date('invalid')); // false
isValidDate('2024-01-01'); // false
isValidDate(1704067200000); // false

dateParse

解析日期值。

typescript
function dateParse(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值,可以是时间戳、日期字符串或 Date 对象

返回值

DateLike - 解析后的日期对象

示例

typescript
dateParse(1704067200000); // Date 对象
dateParse('2024-01-01'); // Date 对象
dateParse('2024-01-01T12:00:00Z'); // Date 对象
dateParse(new Date()); // Date 对象

dateFormat

格式化日期。

typescript
function dateFormat(dateValue: DateValue, format?: string): string;

参数

参数类型默认值描述
dateValueDateValue-日期值
formatstring'YYYY-MM-DD HH:mm:ss'格式化模板

格式化占位符

占位符描述示例
YYYY年份(4 位)2024
YY年份(2 位)24
MM月份(2 位)01-12
M月份1-12
DD日期(2 位)01-31
D日期1-31
HH小时(24 小时制,2 位)00-23
H小时(24 小时制)0-23
hh小时(12 小时制,2 位)01-12
h小时(12 小时制)1-12
mm分钟(2 位)00-59
m分钟0-59
ss秒(2 位)00-59
s0-59
SSS毫秒(3 位)000-999
AAM/PMAM, PM
aam/pmam, pm

返回值

string - 格式化后的日期字符串

示例

typescript
dateFormat(1704067200000); // '2024-01-01 08:00:00'
dateFormat('2024-01-01', 'YYYY/MM/DD'); // '2024/01/01'
dateFormat(new Date(), 'YYYY年MM月DD日'); // '2024年01月01日'
dateFormat(new Date(), 'HH:mm:ss'); // '12:00:00'
dateFormat(new Date(), 'hh:mm:ss A'); // '12:00:00 PM'

dateRelative

获取相对时间描述。

typescript
function dateRelative(dateValue: DateValue, refDateValue?: DateValue, templates?: DateRelativeTemplates): string;

参数

参数类型描述
dateValueDateValue目标日期
refDateValueDateValue参考日期,默认为当前时间
templatesDateRelativeTemplates自定义模板

返回值

string - 相对时间描述

示例

typescript
const now = new Date();
const past = new Date(now.getTime() - 60 * 1000); // 1 分钟前

dateRelative(past); // '刚刚'
dateRelative(past, now); // '刚刚'

const future = new Date(now.getTime() + 60 * 60 * 1000); // 1 小时后
dateRelative(future); // '1 小时后'

isLeapYear

判断是否为闰年。

typescript
function isLeapYear(year: number): boolean;

参数

参数类型描述
yearnumber年份

返回值

boolean - 是否为闰年

示例

typescript
isLeapYear(2024); // true
isLeapYear(2023); // false
isLeapYear(2000); // true
isLeapYear(1900); // false

isSameDateInYear

判断两个日期是否在同一年。

typescript
function isSameDateInYear(date1: DateValue, date2: DateValue): boolean;

参数

参数类型描述
date1DateValue第一个日期
date2DateValue第二个日期

返回值

boolean - 是否在同一年

示例

typescript
isSameDateInYear('2024-01-01', '2024-12-31'); // true
isSameDateInYear('2024-01-01', '2025-01-01'); // false

isSameDateInMonth

判断两个日期是否在同一个月。

typescript
function isSameDateInMonth(date1: DateValue, date2: DateValue): boolean;

参数

参数类型描述
date1DateValue第一个日期
date2DateValue第二个日期

返回值

boolean - 是否在同一个月

示例

typescript
isSameDateInMonth('2024-01-15', '2024-01-31'); // true
isSameDateInMonth('2024-01-15', '2024-02-01'); // false

isSameDateInDay

判断两个日期是否在同一天。

typescript
function isSameDateInDay(date1: DateValue, date2: DateValue): boolean;

参数

参数类型描述
date1DateValue第一个日期
date2DateValue第二个日期

返回值

boolean - 是否在同一天

示例

typescript
isSameDateInDay('2024-01-01 08:00', '2024-01-01 20:00'); // true
isSameDateInDay('2024-01-01', '2024-01-02'); // false

isSameDateInHour

判断两个日期是否在同一小时。

typescript
function isSameDateInHour(date1: DateValue, date2: DateValue): boolean;

参数

参数类型描述
date1DateValue第一个日期
date2DateValue第二个日期

返回值

boolean - 是否在同一小时

示例

typescript
isSameDateInHour('2024-01-01 08:30', '2024-01-01 08:45'); // true
isSameDateInHour('2024-01-01 08:00', '2024-01-01 09:00'); // false

isSameDateInMinute

判断两个日期是否在同一分钟。

typescript
function isSameDateInMinute(date1: DateValue, date2: DateValue): boolean;

参数

参数类型描述
date1DateValue第一个日期
date2DateValue第二个日期

返回值

boolean - 是否在同一分钟

示例

typescript
isSameDateInMinute('2024-01-01 08:30:15', '2024-01-01 08:30:45'); // true
isSameDateInMinute('2024-01-01 08:30:00', '2024-01-01 08:31:00'); // false

isSameDateInSecond

判断两个日期是否在同一秒。

typescript
function isSameDateInSecond(date1: DateValue, date2: DateValue): boolean;

参数

参数类型描述
date1DateValue第一个日期
date2DateValue第二个日期

返回值

boolean - 是否在同一秒

示例

typescript
isSameDateInSecond('2024-01-01 08:30:15.100', '2024-01-01 08:30:15.900'); // true
isSameDateInSecond('2024-01-01 08:30:15', '2024-01-01 08:30:16'); // false

dateDaysInMonth

获取指定月份的天数。

typescript
function dateDaysInMonth(dateValue: DateValue): number;

参数

参数类型描述
dateValueDateValue日期值

返回值

number - 天数

示例

typescript
dateDaysInMonth('2024-01'); // 31
dateDaysInMonth('2024-02'); // 29
dateDaysInMonth('2023-02'); // 28

dateDaysInYear

获取指定年份的天数。

typescript
function dateDaysInYear(dateValue: DateValue): number;

参数

参数类型描述
dateValueDateValue日期值

返回值

number - 天数

示例

typescript
dateDaysInYear('2024'); // 366
dateDaysInYear('2023'); // 365

weeksOfYear

获取指定日期在当年的周数。

typescript
function weeksOfYear(dateValue: DateValue, weekStart?: EWeekStart): number;

参数

参数类型默认值描述
dateValueDateValue-日期值
weekStartEWeekStartEWeekStart.sunday一周的开始日

返回值

number - 周数

示例

typescript
weeksOfYear('2024-01-01'); // 1
weeksOfYear('2024-01-01', EWeekStart.monday); // 1

weeksOfMonth

获取指定日期在当月的周数。

typescript
function weeksOfMonth(dateValue: DateValue, weekStart?: EWeekStart): number;

参数

参数类型默认值描述
dateValueDateValue-日期值
weekStartEWeekStartEWeekStart.sunday一周的开始日

返回值

number - 周数

示例

typescript
weeksOfMonth('2024-01-01'); // 1
weeksOfMonth('2024-01-08'); // 2

dateStartInSecond

返回秒级起始时间。

typescript
function dateStartInSecond(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 秒级起始时间,毫秒部分为 0

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500);
dateStartInSecond(date); // 2023-06-15 12:30:45.000

dateStartInMinute

返回分钟级起始时间。

typescript
function dateStartInMinute(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 分钟级起始时间,秒和毫秒部分为 0

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500);
dateStartInMinute(date); // 2023-06-15 12:30:00.000

dateStartInHour

返回小时级起始时间。

typescript
function dateStartInHour(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 小时级起始时间,分钟、秒和毫秒部分为 0

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500);
dateStartInHour(date); // 2023-06-15 12:00:00.000

dateStartInDay

返回天级起始时间。

typescript
function dateStartInDay(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 天级起始时间,小时、分钟、秒和毫秒部分为 0

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500);
dateStartInDay(date); // 2023-06-15 00:00:00.000

dateStartInWeek

返回周级起始时间(周一 00:00:00.000)。

typescript
function dateStartInWeek(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 当周周一的起始时间,时间部分为 0

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500); // 周四
dateStartInWeek(date); // 2023-06-12 00:00:00.000(周一)

dateStartInMonth

返回月级起始时间。

typescript
function dateStartInMonth(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 月级起始时间,日期为当月第一天,时间部分为 0

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500);
dateStartInMonth(date); // 2023-06-01 00:00:00.000

dateStartInYear

返回年级起始时间。

typescript
function dateStartInYear(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 年级起始时间,月份为 1 月,日期为 1 日,时间部分为 0

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500);
dateStartInYear(date); // 2023-01-01 00:00:00.000

dateEndInSecond

返回秒级结束时间。

typescript
function dateEndInSecond(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 秒级结束时间,毫秒部分为 999

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500);
dateEndInSecond(date); // 2023-06-15 12:30:45.999

dateEndInMinute

返回分钟级结束时间。

typescript
function dateEndInMinute(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 分钟级结束时间,秒为 59,毫秒为 999

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500);
dateEndInMinute(date); // 2023-06-15 12:30:59.999

dateEndInHour

返回小时级结束时间。

typescript
function dateEndInHour(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 小时级结束时间,分钟为 59,秒为 59,毫秒为 999

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500);
dateEndInHour(date); // 2023-06-15 12:59:59.999

dateEndInDay

返回天级结束时间。

typescript
function dateEndInDay(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 天级结束时间,小时为 23,分钟为 59,秒为 59,毫秒为 999

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500);
dateEndInDay(date); // 2023-06-15 23:59:59.999

dateEndInWeek

返回周级结束时间(周日 23:59:59.999)。

typescript
function dateEndInWeek(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 当周周日的结束时间,时间为 23:59:59.999

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500); // 周四
dateEndInWeek(date); // 2023-06-18 23:59:59.999(周日)

dateEndInMonth

返回月级结束时间。

typescript
function dateEndInMonth(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 月级结束时间,日期为当月最后一天,时间为 23:59:59.999

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500);
dateEndInMonth(date); // 2023-06-30 23:59:59.999

dateEndInYear

返回年级结束时间。

typescript
function dateEndInYear(dateValue: DateValue): DateLike;

参数

参数类型描述
dateValueDateValue日期值

返回值

DateLike - 年级结束时间,月份为 12 月,日期为 31 日,时间为 23:59:59.999

示例

typescript
const date = new Date(2023, 5, 15, 12, 30, 45, 500);
dateEndInYear(date); // 2023-12-31 23:59:59.999

TimezoneDate

时区日期类,用于处理不同时区的日期。

typescript
class TimezoneDate {
  constructor(date?: DateValue, utcOffset?: number);

  // 获取方法
  getTimezoneOffset(): number;
  getUTCOffset(): number;
  getFullYear(): number;
  getMonth(): number;
  getDate(): number;
  getHours(): number;
  getMinutes(): number;
  getSeconds(): number;
  getMilliseconds(): number;

  // 设置方法
  setFullYear(year: number, month?: number, date?: number): number;
  setMonth(month: number, date?: number): number;
  setDate(date: number): number;
  setHours(hours: number, minutes?: number, seconds?: number, milliseconds?: number): number;
  setMinutes(minutes: number, seconds?: number, milliseconds?: number): number;
  setSeconds(seconds: number, milliseconds?: number): number;
  setMilliseconds(milliseconds: number): number;

  // 转换方法
  toISOString(): string;

  // 静态方法
  static changeUtcOffset(td: TimezoneDate, utcOffset: number): TimezoneDate;
  static getTimezoneOffset(utcOffset?: number): number;
  static getUTCOffset(timezoneOffset?: number): number;
}

示例

typescript
// 创建时区日期
const td = new TimezoneDate('2024-01-01', 8); // UTC+8

// 获取时间
td.getFullYear(); // 2024
td.getMonth(); // 0
td.getDate(); // 1

// 修改时区
const td2 = TimezoneDate.changeUtcOffset(td, -5); // UTC-5
td2.getHours(); // 与 UTC+8 相差 13 小时

// 转换为 ISO 字符串
td.toISOString(); // '2024-01-01T00:00:00.000+08:00'

基于 MIT 许可发布