angularjs-与日期格式混淆

angularjs-与日期格式混淆,angularjs,date,momentjs,Angularjs,Date,Momentjs,我对日期格式非常困惑,需要一些澄清。我正在尝试使用日期预填充表单,并已设置$scope.selectedDate=c.data.Appt.registered.start\u date 在我的控制台中,c.data.Appt.registered.start_date是一个字符串: 但是,当我将$scope.selectedDate设置为该值时,没有显示任何内容 相反,如果我在前面添加新日期 (new Date(c.data.Appt.enrolled.start_date)) 一个日期显示

我对日期格式非常困惑,需要一些澄清。我正在尝试使用日期预填充表单,并已设置$scope.selectedDate=c.data.Appt.registered.start\u date

在我的控制台中,c.data.Appt.registered.start_date是一个字符串:

但是,当我将$scope.selectedDate设置为该值时,没有显示任何内容

相反,如果我在前面添加新日期

(new Date(c.data.Appt.enrolled.start_date))
一个日期显示出来,但它是一天前(2018年4月24日)

除此之外,当我尝试将“新日期”版本插入函数时(即使它不是正确的日期),我会在控制台中收到一条警告:“即时构造返回到js日期。这是不鼓励的,将在即将到来的主要版本中删除。”

有人能解释一下我应该如何设置日期格式,以便我:1)获得正确的日期,而不是提前一天;2)能够在没有收到警告的情况下将其插入函数吗


谢谢

由于日期是一个没有时区信息的字符串(只有日期),JavaScript日期解析器将在
00:00
小时将其视为通用时间(UTC,格林威治标准时间)。然后,它将以小时为单位减去区域设置时区的偏移量,并将导致日期在您实际想要的日期之前或之后几个小时。这是一个常见的混淆点

解决此问题的最佳方法是手动解析日期:

function localDate(dateString) {
  var d = dateString.split(/\D/);
  return new Date(d[0], d[1]-1, d[2]);
}
有关更多信息,请参见此问题:

Moment.js给出了这个警告,因为依赖
new Date()
所做的字符串解析被认为是不好的做法,因为它在不同的浏览器(IE\Firefox\Etc)中会有不同的结果。使用以下表单生成日期更方便跨浏览器:
新日期(年、月、日)
。(请注意,月份从零开始,而不是从1开始)

可能重复的