我使用日期选择器选择一个日期并将其发送到服务器。当我记录JS值时,我得到了正确的结果:
Tue Mar 22 2016 00:00:00 GMT+0100 (Mitteleuropäische Zeit)
但在 AJAX 请求中是
2016-03-21T23:00:00.000Z
我不修改值,只是将对象赋予angulars http函数。Angular需要一些配置来处理它吗?
vof42yt11#
你可以试试下面的代码
dateObj.setMinutes((dateObj.getMinutes() + dateObj.getTimezoneOffset()));
无需本地化,在执行任何服务调用之前使用此代码。它会传递给你你在日期选择器中选择的确切日期。它将在所有时区(+)和(-)工作,例如:2016-03-21 00:00:00 GMT+0100,上述代码将其转换为2016-03-21 01:00:00 GMT+0000。在服务时,它将其转换为2016-03-21 00:00:00。我想这会解决你的问题。
2016-03-21 00:00:00 GMT+0100
2016-03-21 01:00:00 GMT+0000
2016-03-21 00:00:00
gfttwv5a2#
这两个字符串表示相同的时间。一个是UTC,即GMT +0,你可以从Z结尾看到。另一个是在不同的时区,特别是GMT +1小时。如果你有两个字符串的javascript日期对象,并将它们转换为整数,即从1970年1月1日UTC过去了几秒,你会发现它们是一样的。它们代表同一个“瞬间”,但在两个不同的“地理位置”。
Z
var d1 = new Date('Tue Mar 22 2016 00:00:00 GMT+0100'); var d2 = new Date('2016-03-21T23:00:00.000Z'); Number(d1); // 1458601200000 Number(d2); // 1458601200000
总的来说,这是一件好事。在时区交易变得非常混乱。我发现服务器最好总是使用UTC。
cwdobuhd3#
https://github.com/angular/material/pull/9410查看1.1.1+版本。这将解决您的问题。
<md-datepicker ng-model="date" ng-model-options="{ timezone: 'utc' }"></md-datepicker>
gorkyyrv4#
假设我选择了一个像Tue Aug 06 2019 00:00:00 GMT+0530 (India Standard Time)这样的日期,我得到了2019-08-05T18:30:00.000Z。(在我的情况下,是相对于所选日期的前一个日期)我使用toLocalDateString()来完成这项工作。
Tue Aug 06 2019 00:00:00 GMT+0530 (India Standard Time)
2019-08-05T18:30:00.000Z
// this.date = 2019-08-05T18:30:00.000Z const converted = new Date(this.date).toLocaleDateString(); console.log(converted); // 8/6/2019 (MM/DD/YYYY) format
imzjd6km5#
我以前也遇到过这样的错误,我通过删除import MatNativeDateModule并导入MatMomentDateModule并编写提供程序来解决这个问题。
MatNativeDateModule
MatMomentDateModule
{ provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } }
5条答案
按热度按时间vof42yt11#
你可以试试下面的代码
无需本地化,在执行任何服务调用之前使用此代码。它会传递给你你在日期选择器中选择的确切日期。
它将在所有时区(+)和(-)工作,
例如:
2016-03-21 00:00:00 GMT+0100
,上述代码将其转换为2016-03-21 01:00:00 GMT+0000
。在服务时,它将其转换为2016-03-21 00:00:00
。我想这会解决你的问题。
gfttwv5a2#
这两个字符串表示相同的时间。一个是UTC,即GMT +0,你可以从
Z
结尾看到。另一个是在不同的时区,特别是GMT +1小时。如果你有两个字符串的javascript日期对象,并将它们转换为整数,即从1970年1月1日UTC过去了几秒,你会发现它们是一样的。它们代表同一个“瞬间”,但在两个不同的“地理位置”。
总的来说,这是一件好事。在时区交易变得非常混乱。我发现服务器最好总是使用UTC。
cwdobuhd3#
https://github.com/angular/material/pull/9410
查看1.1.1+版本。这将解决您的问题。
gorkyyrv4#
假设我选择了一个像
Tue Aug 06 2019 00:00:00 GMT+0530 (India Standard Time)
这样的日期,我得到了
2019-08-05T18:30:00.000Z
。(在我的情况下,是相对于所选日期的前一个日期)我使用toLocalDateString()来完成这项工作。
imzjd6km5#
我以前也遇到过这样的错误,我通过删除import
MatNativeDateModule
并导入MatMomentDateModule
并编写提供程序来解决这个问题。