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

日期解析日月颠倒及selectedHour变为undefined问题求助

解决你的日期解析和数组索引问题

让我们逐个拆解并解决你遇到的两个问题:

问题1:日期解析时日月颠倒

JavaScript的Date构造函数在解析dd/MM/yyyy格式的字符串时,会默认把它识别为美式的MM/dd/yyyy格式,这就导致了日月被反转的问题。直接依赖自动解析不可靠,我们需要手动拆分日期组件来构造正确的Date对象:

// 拼接完整的日期时间字符串
const dateTimeStr = `${measure.date} ${measure.column[key].time}`;
// 拆分日期和时间部分
const [datePart, timePart] = dateTimeStr.split(" ");

// 按/拆分日、月、年(原格式是dd/MM/yyyy)
const [day, month, year] = datePart.split("/");
// 按:拆分时、分
const [hours, minutes] = timePart.split(":");

// 构造正确的Date对象:注意月份是0-based(0代表1月,11代表12月),所以要减1
const selectedDate = new Date(year, month - 1, day, hours, minutes);

console.log(selectedDate); // 现在会输出正确的Sat Aug 05 2017 08:05:00...

这种手动拆分的方式彻底避免了格式识别歧义,比依赖Date的自动解析更稳定。

问题2:$scope.popupData中的selectedHour显示undefined

你遇到这个问题的核心是数组索引使用错误:你用key作为数组索引去访问新添加的元素,但push方法是把元素追加到数组末尾,新元素的索引应该是数组长度减1(或者直接取数组最后一个元素),而不是key。

修改代码如下:

// 向数组添加元素,push返回数组新长度,减1得到新元素的索引
const newItemIndex = $scope.popupData.push({
  selectedHour: selectedDate,
  minHour: $scope.minvalueHour,
  maxHour: $scope.maxvalueHour,
  valueItem: measure.column[key].value
}) - 1;

// 正确访问新添加的元素
console.log($scope.popupData[newItemIndex].selectedHour);

如果只是想快速验证最后一个元素的内容,也可以直接用$scope.popupData[$scope.popupData.length - 1].selectedHour来访问。

为什么之前的$scope.popupData[key]会返回undefined?因为如果key不是数组的有效数字索引(比如key是字符串,或者数值大于等于数组长度),数组在这个索引位置就没有对应元素,自然会返回undefined。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:15:03