angular material 的日期选择器的日期错误
Wrong date with angular material's date picker
我使用日期选择器选择日期并将其发送到服务器。
当我记录 JS 值时,我得到了正确的结果:
Tue Mar 22 2016 00:00:00 GMT+0100 (Mitteleuropäische Zeit)
但在 ajax 请求中它是
2016-03-21T23:00:00.000Z
我不修改值,只是将对象提供给 angulars http 函数。
Angular需要一些配置来处理吗?
这两个字符串代表同一时间。一种是 UTC,即 GMT +0,您可以从 Z
结尾看到。另一个在不同的时区,特别是 GMT +1 小时。
如果两个字符串都有 javascript 个日期对象,并将它们转换为整数,即自 1970 年 1 月 1 日以来经过的秒数,UTC,您会发现它们是相同的。它们代表相同的即时,但在两个不同的地理位置。
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 处理。
https://github.com/angular/material/pull/9410
查看 1.1.1+ 版本。这将解决您的问题。
<md-datepicker ng-model="date" ng-model-options="{ timezone: 'utc' }"></md-datepicker>
你可以试试下面这段代码
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
.
我想它会解决你的问题。
如果假设我选择 Tue Aug 06 2019 00:00:00 GMT+0530 (India Standard Time)
这样的日期,
会得到 2019-08-05T18:30:00.000Z
。 (在我的情况下,相对于所选日期的前一个日期)
我利用 toLocalDateString() 来完成这项工作。
// 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
我使用日期选择器选择日期并将其发送到服务器。
当我记录 JS 值时,我得到了正确的结果:
Tue Mar 22 2016 00:00:00 GMT+0100 (Mitteleuropäische Zeit)
但在 ajax 请求中它是
2016-03-21T23:00:00.000Z
我不修改值,只是将对象提供给 angulars http 函数。
Angular需要一些配置来处理吗?
这两个字符串代表同一时间。一种是 UTC,即 GMT +0,您可以从 Z
结尾看到。另一个在不同的时区,特别是 GMT +1 小时。
如果两个字符串都有 javascript 个日期对象,并将它们转换为整数,即自 1970 年 1 月 1 日以来经过的秒数,UTC,您会发现它们是相同的。它们代表相同的即时,但在两个不同的地理位置。
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 处理。
https://github.com/angular/material/pull/9410
查看 1.1.1+ 版本。这将解决您的问题。
<md-datepicker ng-model="date" ng-model-options="{ timezone: 'utc' }"></md-datepicker>
你可以试试下面这段代码
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
.
我想它会解决你的问题。
如果假设我选择 Tue Aug 06 2019 00:00:00 GMT+0530 (India Standard Time)
这样的日期,
会得到 2019-08-05T18:30:00.000Z
。 (在我的情况下,相对于所选日期的前一个日期)
我利用 toLocalDateString() 来完成这项工作。
// 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