日期解析日月颠倒及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
相关产品推荐
相关产品推荐

