angularjs - 与日期格式的混淆

时间:2018-04-24 21:37:26

标签: angularjs date momentjs

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

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

enter image description here

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

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

#importing module Like Namespace in .Net
import pypyodbc
#creating connection Object which will contain SQL Server Connection
connection = pypyodbc.connect('Driver={SQL Server};Server=DESKTOP-NJR6F8V\SQLEXPRESS;Data Source=DESKTOP-NJR6F8V\SQLEXPRESS;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False')
cursor = connection.cursor()
SQLCommand = ("SELECT * FROM MyAI_DB.dbo.WordDefinitions")
#Processing Query
cursor.execute(SQLCommand)
#Commiting any pending transaction to the database.
print(cursor.fetchone())
connection.commit()
#closing connection
#connection.close()

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

Moment.js给出了警告,因为依赖于new Date()执行的字符串解析被认为是不好的做法,因为它在不同的浏览器(IE \ Firefox \等等)中会有不同的结果。使用此表单构建日期更加跨浏览器友好:new Date(year, month, day)。 (请注意,月份从零开始,而不是1)