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
相关产品推荐
相关产品推荐

