我正在开发一个web应用程序,它使用Angular 6和PrimeNG控件进行前端开发,使用ASP.Net Web和Server进行后端开发。
在我的表单中,有两个PrimeNG日历控件可以将日期和结束日期保存到数据库中。提交表单后,收集所有表单字段以填充对象/模型,并将该模型传递给Web。该对象/模型使用类型记录代码以角6填充。下面是我在打字代码中的前端模型:
export class MyPackage {
public PackageId: number;
public PackageUid: number;
public PackageName: string;
public PackageDesc: string;
public ValidFrom: Date;
public ValidTill: Date;
public CreatedOn: Date;
}
下面是我的对象初始化过程,它使用了角6和类型记录:
let pakg = new MyPackage();
pakg.PackageName = this.packageAddForm.controls["packageName"].value;
pakg.PackageDesc = this.packageAddForm.controls["packageDesc"].value;
pakg.ValidFrom = this.packageAddForm.controls["dateFrom"].value;
pakg.ValidTill = this.packageAddForm.controls["dateEnd"].value;
现在的问题是,当模型被传递到Web时,来自日期和结束日期值的减少了1天,我不知道为什么。我已经调试了我的角6代码,并看到它通过了我选择的确切日期,但是当这个模型到达Web时,日期会落后1天。
有谁能描述一下,为什么会出现这个问题,以及如何解决这个问题?
发布于 2019-05-23 06:13:30
一个可能的罪魁祸首是客户端和服务器之间的时区偏移。
当通过JavaScript客户端发送JSON日期时,使用JSON.stingify()方法将数据转换为JSON字符串。这个使用ISO 8601格式将所有日期转换为字符串,像这样:
YYYY-MM-DDTHH:mm:ss.sssZ
这种格式的一个令人困惑的方面是字母Z在末尾的目的,它代表Zulu,或零UTC时区偏移量。
当日期转换为此字符串时,数值时间值实际上被修改为没有时区偏移量,而不是客户端的时区偏移量。这是为了规范实际时间,以防服务器处于不同的时区。
重要的是要确保Web被设置为基于零UTC偏移量来解释时间的字符串值表示。
发布于 2019-11-08 15:32:09
要解决这个问题,您需要将日期转换为"MM/DD/YYYY“格式,
遵循.ts文件中的以下步骤在角应用程序中,
1)导入DatePipe类
import { DatePipe } from '@angular/common';
2)在构造函数中添加以下内容
private datePipe: DatePipe
3)使用转换转换日期,
this.StartDate = this.datePipe.transform(this.todayDate, 'MM/dd/yyyy');
注意:日期变量应该是任何类型。
发布于 2021-06-11 10:06:27
角客户端更改HTTP请求的有效负载日期格式。我解决了将此添加到模块提供程序中的问题:
{ provide: MAT_DATE_LOCALE, useValue: 'en-GB' }, /* optional */
{ provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } },
然后像这样进口:
import {MAT_MOMENT_DATE_ADAPTER_OPTIONS} from '@angular/material-moment-adapter';
import { MAT_DATE_LOCALE } from "@angular/material/core";
最后,将此部分添加到模块和自动导入中。
import: [MatDatepickerModule,MatMomentDateModule]
你的问题也解决了,希望:)
https://stackoverflow.com/questions/55985132
复制相似问题