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

NetSuite用户事件服务端脚本:从日期时间字符串初始化DateTime对象

解决ISO 8601日期字符串转SuiteScript DateTime/JavaScript Date对象问题

1. JavaScript 原生方案

你的日期字符串是标准的ISO 8601 UTC格式,直接用new Date()就能正确解析,可能之前你误解了本地时区的显示差异:

const dateStr = "2022-10-27T01:35:48.354z";
const jsDate = new Date(dateStr);

// 验证:输出的ISO字符串应该和原字符串一致(忽略大小写的z)
console.log(jsDate.toISOString()); // 输出 "2022-10-27T01:35:48.354Z"

注意:new Date()会将UTC时间转换为当前运行环境的本地时区显示,但内部存储的时间戳是和原UTC时间完全一致的。

2. SuiteScript 2.x 方案

如果需要转换为SuiteScript的DateTime对象,有两种可靠方式:

方式一:从JS Date转换

先通过原生JS解析出Date对象,再转成SuiteScript DateTime:

import { DateTime } from 'N/record';

const dateStr = "2022-10-27T01:35:48.354z";
const jsDate = new Date(dateStr);
const ssDateTime = DateTime.fromDate({
    date: jsDate
});

方式二:用format.parse(需指定UTC时区)

之前可能没指定时区导致解析错误,必须明确设置timezone为UTC:

import format from 'N/format';
import { DateTime } from 'N/record';

const dateStr = "2022-10-27T01:35:48.354z";
const ssDateTime = format.parse({
    value: dateStr,
    type: format.Type.DATETIME,
    timezone: format.Timezone.UTC // 关键:原字符串是UTC时间,必须对应时区
});

3. Moment.js 方案

用moment.utc()解析UTC格式字符串,避免本地时区干扰:

const dateStr = "2022-10-27T01:35:48.354z";
const momentDate = moment.utc(dateStr);

// 转JS Date
const jsDate = momentDate.toDate();
// 转SuiteScript DateTime
const ssDateTime = DateTime.fromDate({ date: jsDate });

常见问题排查

  • 如果用format.parse时时间偏差,大概率是没指定UTC时区,SuiteScript默认会用当前脚本的时区解析,导致UTC时间被转换为本地时区。
  • 原生JS的new Date显示的本地时间是正常的,要验证时间正确性,用toISOString()输出UTC格式字符串对比原输入即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:20:25