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

Google图表报错“c.getTimezoneOffset is not a function”求助

解决Google Charts报错“c.getTimezoneOffset is not a function”

嘿,这个报错我之前帮人排查过,大概率是Google Charts没法把你传的日期字符串正确转成JavaScript的Date对象——毕竟字符串可没有getTimezoneOffset这个方法,自然就报错了。结合你提供的PHP代码和已排查的信息(数组正常、凭据没问题),给你几个针对性的解决办法:

1. 先从SQL的日期格式下手

你现在用CONVERT(char(10), TimeDateStatus,102)得到的是yyyy.mm.dd这种格式,虽然直观,但JS的Date对象对这种点分隔的格式兼容性不算最好。咱们换个JS原生支持的格式:

SELECT TOP (100) CONVERT(char(10), TimeDateStatus,23) AS Date, Spa...

用23作为转换样式的话,得到的就是yyyy-MM-dd格式,JS能直接识别。要是想更稳妥,还可以直接转成毫秒时间戳(Google Charts也支持):

SELECT TOP (100) DATEDIFF(second, '1970-01-01', TimeDateStatus) * 1000 AS Timestamp, Spa...

(注:SQL Server的DATEDIFF返回的是秒数,乘以1000才能对应JS的毫秒时间戳)

2. 前端手动转成Date对象

要是不想改SQL,就在前端处理数据的时候,把日期字符串转成正经的Date对象。假设你是把PHP数组转成JSON传给前端,那可以这么处理:

// 假设data是你从后端拿到的JSON数组
const chartReadyData = data.map(item => {
  // 把yyyy.mm.dd换成yyyy-MM-dd,再创建Date对象
  const fixedDateStr = item.Date.replace(/\./g, '-');
  return [new Date(fixedDateStr), item.你的其他字段]; // 替换成你实际的字段名
});

3. 检查PHP输出的JSON格式

你可以在PHP里输出JSON的时候,加上JSON_PRETTY_PRINT,方便在浏览器里看数据有没有问题:

// 假设$results是你从数据库查出来的数组
echo json_encode($results, JSON_PRETTY_PRINT);

然后打开浏览器控制台,看看返回的JSON里日期字段是不是正确的字符串,有没有空值或者乱码——空值也会导致类似的报错哦。

最后验证一下

你可以在前端控制台敲一行代码测试:new Date("你拿到的日期字符串"),如果返回Invalid Date,那就是格式的问题,照着上面的方法改就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:58:52