Javascript 角材料日期错误';s日期选择器

Javascript 角材料日期错误';s日期选择器,javascript,angularjs,datepicker,angular-material,Javascript,Angularjs,Datepicker,Angular Material,我使用日期选择器选择日期并将其发送到服务器 当我记录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+

我使用日期选择器选择日期并将其发送到服务器

当我记录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以来经过的秒数,您会发现它们是相同的。它们代表同一时刻,但在两个不同的地理位置

一般来说,这是一件好事。处理时区问题变得非常混乱。我发现服务器最好始终使用UTC进行交易。

查看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


我想这会解决你的问题。

如果我选择一个日期,比如2019年8月6日星期二00:00:00 GMT+0530(印度标准时间),
我得到的是
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

我强烈建议你不要尝试。服务器可以存储UTC,然后将UTC发送回浏览器。Javascript可以从UTC时间构造一个
Date
对象,它将默认为向用户显示一个本地化的时区,而无需您做任何事情。如果您确实必须在服务器上存储特定于时区的值,则可以通过调用其
.toString()
方法,在发送之前将其强制为字符串。我发现将ng模型选项=“{timezone:'utc'}”添加到md日期选择器是一个很好的解决方案。如何解决材质日期选择器的问题?我刚刚尝试了
{provide:MAT\u MOMENT\u DATE\u ADAPTER\u OPTIONS,useValue:{useutct:true}}
,但这对我不起作用。请求看起来仍然是这样的:1997-12-23T23:00:00.000ZHey@Brendan,我无法应用这个。有什么想法吗?你需要导入
MatMomentDateModule
而不是
MatNativeDateModule
来工作
{提供:MAT\u MOMENT\u DATE\u适配器选项,useValue:{useUtc:true}}
我想在angular 2(+)和MAT datepicker中执行相同的操作,有解决方案吗?提前谢谢!!尝试过这种方法,当datepicker字段没有任何值时,它会工作。但是,如果日期有值,例如5月8日,当我们在太平洋时区首次编辑datepicker字段时,显示的值将是5月9日(提前1天)。有人能帮忙吗?@SukanyaPai-我修改了答案,只需尝试上面的答案。也许我做错了什么,但没有你的方法,我将正确的日期作为GMT+0100的控制台日志。现在我得到了前一天,落后1小时和GMT+0100,所以从2019-06-13 00:00到2019-06-12 23:00,这导致了2019-06-12 22:00的请求
    // 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