【问题标题】:Date loses format and goes to undefined日期丢失格式并变为未定义
【发布时间】:2018-05-11 10:48:43
【问题描述】:

我创建了这段代码。

var selectedDate = new Date();
selectedDate = new Date(measure.date + " " + measure.column[key].time);
console.log(measure.date + " " + measure.column[key].time); //08/05/2017 08:05 <- dd/MM/yyyy HH:mm
console.log(selectedDate); //Sat Aug 05 2017 08:05:00 GMT+0200 (Romance Summer Time)
$scope.popupData.push({selectedHour: selectedDate, minHour:$scope.minvalueHour, maxHour:$scope.maxvalueHour, valueItem:measure.column[key].value});
console.log($scope.popupData[key].selectedHour);
//0: {selectedHour: undefined, minHour: "08:00", maxHour: "08:59", valueItem: "10", $$hashKey: "object:887"}length: 1__proto__: Array(0)

这段代码有两个问题,第一个,它改变了天的月份,第二个虽然它创建了日期,但显示变量未定义,我在 cmets 中指出了 console.log 的结果

【问题讨论】:

  • 什么是measure
  • {turnHours: "08:00", date: "08/05/2017", column: Array(1), $$hashKey: "object:90"} $$hashKey: "object :90" 列 : Array(1) 0 : 时间 : "08:05" 值 : "10" proto : 对象长度 : 1 proto : Array(0) 日期: "08/05/2017" turnHours : "08:00" proto : Object
  • 你可能会错过的东西在这里可以正常工作jsfiddle.net/5yh74ar4
  • 在您的示例中,变量是字符串而不是日期格式。 (var selectedDate ='08/05/2017';)
  • jsfiddle.net/supercool/320033Lv检查这个没关系。

标签: javascript angularjs date


【解决方案1】:

changes the months for the days 的第一个问题是由于 new Date() 构造函数需要 yyyy-MM-dd(ISO 8601 格式)并且在处理其他输入时表现不佳。

修复:

// Parse measure.date into ISO 8601
var parsedMeasureDate = measure.date.split("/").reverse().join('-');
var selectedDate = new Date(parsedMeasureDate);

// Parse time into array and manually set hours and minutes
var parsedMeasureTime = measure.column[key].time.split(":");
selectedDate.setHours(parsedMeasureTime[0]);
selectedDate.setMinutes(parsedMeasureTime[1]);

至于第二个问题,这很奇怪。尝试预先创建对象,记录它,然后推送它。

var x = {
    selectedHour: selectedDate, 
    minHour:$scope.minvalueHour, 
    maxHour:$scope.maxvalueHour, 
    valueItem:measure.column[key].value
};

console.log(x);

$scope.popupData.push(x);

另外,作为提示,您应该尝试始终存储一个 Date 对象并使用 date angular filter 以您想要的任何格式显示。

【讨论】:

  • 感谢解决了第一个问题,发现不显示值的问题就在html这一行-------->
  • 很好,那么您介意将此标记为首选答案吗? :)
  • 将字符串解析为其组件然后创建另一个字符串供内置解析器解析是没有意义的。获得零件后,将它们直接传递给 Date 构造函数。此外,ISO 格式日期被解析为 UTC,而不是本地,这与 ISO 8601 不一致,并且可能出乎意料,因为它为格林威治以西的时区创建了前一天的日期。见Why does Date.parse give incorrect results?
猜你喜欢
  • 2015-05-21
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多