如何将日期从 asp.net webapi 传递和处理到 angular 组件?
How to pass and process date from asp.net webapi to angular component?
我正在从 asp.net 网络 api 发送日期,如下所示:
SubmitDate.ToString()
它正在返回:
12/13/2018 8:24:20 AM
在 angular 组件中,我正在使用 angular 管道以 "December 12, 2018" 格式显示日期,它在我当前的 PC 日期格式下工作正常,但是当我更改日期格式时我的电脑,它给我的错误如下所示
'Unable to convert "18/12/13 1:54:20 PM" into a date' for pipe 'DatePipe'
请帮忙理解,这些方法我都试过了
SubmitDate.ToLocalTime().ToString()
SubmitDate.ToUniversalTime().ToString()
但没有成功。如何将日期从 Web api 传递和处理到 angular 组件?
使用 angular 管道:
solution.SubmitDate | date:'MMMM d, yyyy'
Javascript 有一个日期对象。如果您将日期作为可接受的格式发送,您可以自动将其解析为 javascript 日期对象。
像这样声明您的响应接口以进行自动解析。
export interface something {
time: Date;
}
从 asp.net 您需要确保以 javascript 理解的格式发送。 docs 接受的格式可能如下所示:
December 17, 1995 03:24:00
或
1995-12-17T03:24:00
问题是asp.net和javascript对日期格式有不同的标准。
如果你想做一个客户端解决方案[JavaScript]:
function ToJavaScriptDate(value) {
var pattern = /Date\(([^)]+)\)/;
var results = pattern.exec(value);
var dt = new Date(parseFloat(results[1]));
return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();
}
但最好的方法是服务器端解决方案。这是一个 returns 真实 UTC 时间 [C#].
的函数
return DateTime.UtcNow
.Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc))
.TotalMilliseconds;
这样你就知道在客户端意味着什么。时间可能因客户而异。
您可以使用 DateTime.ToString() 重载,它接受一个参数以允许您格式化日期。
例如,要格式化为此时适合您的日期,您可以使用:
var date = new DateTime(2018, 12, 13, 8, 24, 20);
Console.WriteLine(date.ToString("MM/dd/yyyy h:mm:ss tt", CultureInfo.InvariantCulture));
//12/13/2018 8:24:20 AM
CultureInfo.InvariantCulture 在这里使用是为了不考虑任何特定于文化的 formatting/localization。
有关日期格式的更多文档 - https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings
你可以在API这边修改日期的格式
SubmitDate.ToString("MMM d, yyyy");
请试试这个。它对我有用。
var utcDate1 = new Date(Date.UTC(96, 1, 2, 3, 4, 5));
// 预期输出:1996 年 2 月 2 日,星期五 03:04:05 GMT
我正在从 asp.net 网络 api 发送日期,如下所示:
SubmitDate.ToString()
它正在返回:
12/13/2018 8:24:20 AM
在 angular 组件中,我正在使用 angular 管道以 "December 12, 2018" 格式显示日期,它在我当前的 PC 日期格式下工作正常,但是当我更改日期格式时我的电脑,它给我的错误如下所示
'Unable to convert "18/12/13 1:54:20 PM" into a date' for pipe 'DatePipe'
请帮忙理解,这些方法我都试过了
SubmitDate.ToLocalTime().ToString()
SubmitDate.ToUniversalTime().ToString()
但没有成功。如何将日期从 Web api 传递和处理到 angular 组件?
使用 angular 管道:
solution.SubmitDate | date:'MMMM d, yyyy'
Javascript 有一个日期对象。如果您将日期作为可接受的格式发送,您可以自动将其解析为 javascript 日期对象。
像这样声明您的响应接口以进行自动解析。
export interface something {
time: Date;
}
从 asp.net 您需要确保以 javascript 理解的格式发送。 docs 接受的格式可能如下所示:
December 17, 1995 03:24:00
或
1995-12-17T03:24:00
问题是asp.net和javascript对日期格式有不同的标准。
如果你想做一个客户端解决方案[JavaScript]:
function ToJavaScriptDate(value) {
var pattern = /Date\(([^)]+)\)/;
var results = pattern.exec(value);
var dt = new Date(parseFloat(results[1]));
return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();
}
但最好的方法是服务器端解决方案。这是一个 returns 真实 UTC 时间 [C#].
的函数return DateTime.UtcNow
.Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc))
.TotalMilliseconds;
这样你就知道在客户端意味着什么。时间可能因客户而异。
您可以使用 DateTime.ToString() 重载,它接受一个参数以允许您格式化日期。
例如,要格式化为此时适合您的日期,您可以使用:
var date = new DateTime(2018, 12, 13, 8, 24, 20);
Console.WriteLine(date.ToString("MM/dd/yyyy h:mm:ss tt", CultureInfo.InvariantCulture));
//12/13/2018 8:24:20 AM
CultureInfo.InvariantCulture 在这里使用是为了不考虑任何特定于文化的 formatting/localization。
有关日期格式的更多文档 - https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings
你可以在API这边修改日期的格式
SubmitDate.ToString("MMM d, yyyy");
请试试这个。它对我有用。
var utcDate1 = new Date(Date.UTC(96, 1, 2, 3, 4, 5)); // 预期输出:1996 年 2 月 2 日,星期五 03:04:05 GMT