You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Luxon.js中hh:mm格式时间转毫秒及DateTime调用报错解决

问题说明
  • 目标需求:将hh:mm格式的时间字符串(例如05:00)转换为当日0点起算的对应毫秒值,例如05:00的正确转换结果为1800000
  • 异常情况1:执行代码console.log(DateTime.fromISO("05:00"))时,返回值为绑定当前日期的完整毫秒级时间戳(例如输出1654574400000),不符合从当日0点起算的要求
  • 异常情况2:编写代码console.log(DateTime("05:00")).toMillis();运行后抛出错误:"Unhandled Rejection (TypeError): Class constructor DateTime cannot be invoked without 'new'"

实现方案

错误原因说明

抛出构造函数调用错误,是因为你使用的DateTime(Luxon库的时间类)不能直接作为普通函数调用,必须通过类提供的静态方法(如fromISO)或者new关键字创建实例,直接写DateTime("05:00")属于非法调用。
而fromISO返回完整时间戳,是因为解析仅含时分的字符串时,方法会自动补全年、月、日为当前系统日期,返回的是该时间点的完整Unix时间戳,自然包含了从1970年1月1日到当前日期的毫秒数。

方案1:继续使用Luxon实现

你只需要计算解析出的时间点和当日0点的时间差,就能得到需要的毫秒值:

import { DateTime } from 'luxon';

const timeObj = DateTime.fromISO("05:00");
// 计算与当日0点的毫秒差
const millis = timeObj.toMillis() - timeObj.startOf('day').toMillis();

console.log(millis); // 输出1800000

方案2:原生JS实现(无第三方依赖)

不需要引入时间处理库的场景下,直接拆分字符串换算即可,逻辑更简单也不会出现日期绑定的异常:

function convertHhmmToMillis(timeStr) {
  const [hours, minutes] = timeStr.split(':').map(Number);
  return hours * 3600 * 1000 + minutes * 60 * 1000;
}

console.log(convertHhmmToMillis("05:00")); // 输出1800000

内容的提问来源于stack exchange,提问作者kkongkk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 05:03:39