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

CMS服务端JS调用Date构造器返回无效日期,如何格式化Graph API返回的时间?

解决方案

方案1:原生字符串解析(无任何依赖)

微软Graph返回的日期格式为固定的ISO 8601格式,你可以直接通过字符串拆分获取时间分量,无需调用Date构造器解析整个字符串:

const dateString = "2021-11-03T07:45:00.0000000";
// 拆分出T后的时间部分
const timePart = dateString.split('T')[1];
// 提取时分
const [hours, minutes] = timePart.split(':').map(Number);
// 格式化分钟为两位
const formattedMinutes = minutes.toString().padStart(2, '0');
console.log(`${hours}:${formattedMinutes}`);

如果原始字符串为UTC时间,需要转成当前运行环境的本地时间,可通过以下方式计算(仅用到无参数Date实例和Date.UTC静态方法,未触发new Date(日期字符串)的限制):

const dateString = "2021-11-03T07:45:00.0000000";
const [datePart, timePart] = dateString.split('T');
const [year, month, day] = datePart.split('-').map(Number);
const [hoursUTC, minutesUTC] = timePart.split(':').map(part => Number(part.split('.')[0]));

// 计算UTC时间总分钟数
const utcTotalMinutes = Date.UTC(year, month - 1, day, hoursUTC, minutesUTC) / 60000;
// 获取本地时区偏移:返回值为UTC时间减本地时间的分钟差
const timezoneOffset = new Date().getTimezoneOffset();
// 计算本地时间总分钟数
const localTotalMinutes = utcTotalMinutes - timezoneOffset;

// 提取当天的时分
const localHours = Math.floor(localTotalMinutes / 60) % 24;
const localMinutes = Math.floor(localTotalMinutes % 60);
const formattedMinutes = localMinutes.toString().padStart(2, '0');

console.log(`${localHours}:${formattedMinutes}`);

若运行环境完全禁止使用Date相关API,且时区固定,可直接手动叠加对应时区的小时偏移后取模24即可,比如东八区直接const localHours = (hoursUTC + 8) % 24。

方案2:第三方依赖方案(更稳定,推荐)

直接使用轻量级的日期处理库dayjs,它可以完美兼容7位毫秒的ISO格式解析,且不会触发你CMS的语法限制:

  1. 安装依赖:
    npm install dayjs
  2. 代码实现:
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
// 加载UTC插件处理时区转换
dayjs.extend(utc);

const dateString = "2021-11-03T07:45:00.0000000";
// UTC时间转本地时间后格式化为H:mm
const formattedTime = dayjs.utc(dateString).local().format('H:mm');
console.log(formattedTime);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:54:01