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

C# DateTime转字符串后部分用户JS解析出现NaN问题求助

解决C# DateTime转字符串后前端JS解析出现NaN的问题

问题原因

核心矛盾在于DateTime.ToString()的默认输出格式依赖C#运行环境的区域设置:

  • 示例中的"12/31/2099 12:00:00 AM"是美式MM/dd/yyyy格式,但如果服务器区域为欧洲(如英国),会输出"31/12/2099 00:00:00"这类dd/MM/yyyy格式。
  • JavaScript的Date.parse()对非标准日期格式兼容性极差,遇到无法识别的格式直接返回NaN。

解决方案

1. 使用ISO 8601标准格式(推荐)

生成JS原生支持的UTC标准格式字符串,彻底避免解析兼容问题:

DateTime utcN = DateTime.UtcNow;
// 输出带时区信息的标准格式,如"2099-12-31T00:00:00.0000000Z"
string utcNow = utcN.ToString("o");

前端无需额外处理,直接实例化Date即可:

var date = new Date(utcNow);

2. 指定固定格式+强制区域

若需自定义格式,必须指定CultureInfo.InvariantCulture避免区域干扰,确保输出格式统一:

using System.Globalization;

DateTime utcN = DateTime.UtcNow;
// 强制输出美式日期格式,不受服务器区域影响
string utcNow = utcN.ToString("MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

3. 传递Unix时间戳(最稳妥)

跳过字符串格式,直接传递毫秒级时间戳,完全规避解析问题:

DateTime utcN = DateTime.UtcNow;
// 计算从1970-01-01 UTC到当前时间的毫秒数
long timestamp = (long)(utcN - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
string utcNow = timestamp.ToString();

前端解析:

var date = new Date(parseInt(utcNow));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:20:38