【问题标题】:Javascript new Date mismatchJavascript 新日期不匹配
【发布时间】:2016-01-07 02:46:08
【问题描述】:

我一直在努力让这件事发挥作用。这是我的问题。

我从不同格式的 REST API 获取日期 (mm-dd-yyyy-timezone, mm-dd-yyy hh:mm:ss, yyyy-mm-dd-timezone, yyyy-mm-dd hh:mm:ss) 但我必须将其格式化为 yyyy-mm-dd 格式。我使用子字符串来捕获前 10 个字符以通过忽略时间/时区来获取日期字符串。

在这个过程中,我观察到了这个问题。

new Date("08-11-1987") gives me Tue Aug 11 1987 00:00:00 GMT-0700 (Pacific Daylight Time)

在哪里,

new Date("1987-08-11") gives me Mon Aug 10 1987 17:00:00 GMT-0700 (Pacific Daylight Time)

为什么在创建 Date 对象时会有一天的差异。

【问题讨论】:

  • 您的服务器 API 不应将日期作为字符串值返回。日期应按原样返回。当日期被序列化时,它具有特定的格式并且还具有有关时区的信息。 Javascript 引擎可以用来确定正确的日期。
  • 请提供您的代码
  • @chandermani 感谢您的回复,存在与服务相关的问题,需要一段时间才能解决。同时,我们正在尝试在 UI 中解决此问题。我只是想了解这个 JS 引擎的行为。
  • @pankaj 感谢您的回复。以下是我的代码 - $filter("date")(new Date(response.dateOfBirth), "yyyy-MM-dd");如果 response.dateOfBirth 是 08-11-1987,它工作正常。如果我通过 1987-08-11 则用户的出生日期减 1。
  • Javascript 引擎会根据当前的语言环境解析日期(如果将字符串传递给它)。所以我们应该避免字符串解析。

标签: javascript angularjs date datetime format


【解决方案1】:

如果您使用 AngularJS,就像您在标签中应用一样。您可以使用 $filter 来制作您想要的日期。在您的情况下,它将是:

$scope.datestring = $filter("date")(data.date, 'yyyy-MM-dd');

有关 $filter(date) 的更多信息,您可以找到here

编辑:

所以,如果我理解正确,您有一个日期显示:10-12-2015 并且您想将其输出为 2015-10-12?您是否使用 javascript datepicker 来获取您的日期或...?当我使用日期选择器输入日期时,日期如下所示:

Mon Oct 12 2015 00:00:00 GMT+0200 (W. Europe Daylight Time)

这个变量被称为:data.date。在此之后,我使用它来过滤您需要的日期,即 yyyy/MM/dd。

$scope.datestring = $filter("date")(data.date, 'yyyy/MM/dd');

输出是 2015/10/12。我没有得到任何奇怪的数字:(

【讨论】:

  • 感谢代码 sn-p @Jelmer 我们一直在使用 agnular 中的 $filter 来格式化。以下是我的代码 - $filter("date")(new Date(response.dateOfBirth), "yyyy-MM-dd");如果 response.dateOfBirth 是 08-11-1987,它工作正常。如果我通过 1987-08-11 则用户的出生日期减 1。
  • 谢谢杰尔默。当我在 $filter 中使用 new Date(date.date) 尝试时,会出现我面临的问题。如果输入已经匹配所需的格式,我发现了一种使用正则表达式跳过 $filter 的解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多