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

如何将ASP.NET Model的DateTime值存入数组用于Google Chart API

解决ASP.NET Model DateTime转JavaScript数组的语法错误问题

我明白你遇到的困扰了——直接把ASP.NET Model里的DateTime值塞到JS的Date构造函数里时,总会触发"缺少')'"的语法错误,这其实是因为ASP.NET输出的日期格式没被正确处理,导致JS引擎解析时卡壳了。

问题根源

你之前写的@:dates.push(new Date(@s.Date))会让ASP.NET直接输出类似new Date(01/05/2024 14:30:00)这样的代码,这在JS里完全不合法:日期字符串没被引号包裹,斜杠和空格会被当成运算符,JS自然会报错。而数字类型的@i能正常运行,是因为输出的是纯数字,完全符合JS语法规范。

两种可行的解决方案

方案1:输出ISO 8601标准格式的日期字符串

ASP.NET的DateTime可以通过ToString("o")输出标准的ISO 8601格式字符串,这种格式能被JS的Date构造函数完美识别,只要记得用引号把它包裹起来就行:

var dates = [];
@foreach (var s in Model.Scores) {
    // 用ISO格式字符串创建JS Date对象
    @:dates.push(new Date('@s.Date.ToString("o")'));
}

方案2:转成JS Date支持的UTC毫秒数

JS的Date构造函数还能接受从1970年1月1日UTC开始计算的毫秒数,我们可以在ASP.NET里先把DateTime转成这个数值,直接输出给JS:

var dates = [];
@foreach (var s in Model.Scores) {
    // 计算UTC毫秒数并创建JS Date对象
    var milliseconds = (int)(s.Date.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
    @:dates.push(new Date(@milliseconds));
}

这种方法不需要处理字符串引号,而且用ToUniversalTime()统一转成UTC时间,能更好地避免时区差异带来的问题。

为什么你之前的String写法不行?

你尝试的String(@s.Date)之类的写法,本质上还是输出了未加引号的日期字符串,比如String(01/05/2024 14:30:00),同样会触发JS语法错误。必须把日期值用引号包裹成合法的JS字符串,才能被正确解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:44:20