代码之家  ›  专栏  ›  技术社区  ›  Dave

angularjs-与日期格式混淆

  •  0
  • Dave  · 技术社区  · 7 年前

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

    在我的控制台中,c.data。附件。已注册。start\u date是一个字符串:

    enter image description here

    但是,当我设置$scope时。如果选择日期,则不会显示任何内容。

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

    (new Date(c.data.Appt.enrolled.start_date))
    

    显示了一个日期,但它是前一天(2018年4月24日)。

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

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

    谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Pop-A-Stash    7 年前

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

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

    function localDate(dateString) {
      var d = dateString.split(/\D/);
      return new Date(d[0], d[1]-1, d[2]);
    }
    

    有关更多信息,请参见此问题: Javascript: parse a string to Date as LOCAL time zone

    片刻js给出了这个警告,因为依赖 new Date() 因为它在不同的浏览器(如Firefox等)中会有不同的结果。使用此表单生成日期更便于跨浏览器浏览: new Date(year, month, day) (请注意,月份从零开始,而不是从1开始)