rod*_*abs 0 .net javascript c# momentjs
所以我有一个使用 React 构建的前端应用程序和一个使用 .Net (C#) 构建的后端应用程序。我遇到了时间转换落后 1 天的问题。
因此,在我的前端中,日期是正确的,采用本地时间格式,并且当 API(后端,C#)收到数据时,它将日期转换为 UTC,这使其落后 1 天。
当我尝试获取 localdate 与 UTC 日期的差异时,使用 moment 会得到 0 的结果。我想保留日期,即使它是 UTC 格式。
我建议使用 UTC 时间从前端到后端传达日期。它们是明确的,并且不依赖于用户所在的时区。
您可以使用Unix time,自 1970 年 1 月 1 日 00:00 UTC 以来的秒数/毫秒数,例如,1635494392 或者 ISO 8601,一个明确定义的日期和时间字符串编码,例如2021-10-29T08:27:22Z。
我建议使用 ISO 8601 日期,因为它们比 Unix 日期更容易观察。它们还受到本机 JS 日期对象和所有时间/日期库的支持。
如果您向后端发送类似日期2021-10-29T08:27:22Z,则不需要将其转换为 UTC,并且不存在歧义。
同样,当前端从后端接收到日期时,使用 ISO UTC 日期将意味着该日期将被明确地解析和理解。
转换为本地时间也很容易,Date.toLocaleString()例如使用。默认情况下,这将显示在用户的本地时区中,但您可以使用参数 { timeZone: 'xxx' } 在任何时区中显示。
例如:
const timestampFromBackend = '2021-10-29T08:27:22Z';
const dateFromBackend = new Date(timestampFromBackend);
console.log('Date from backend (UTC):', dateFromBackend.toLocaleString([], { timeZone: 'UTC'}));
console.log('Date from backend (local):', dateFromBackend.toLocaleString());
// We can display in any timezone if we wish
console.log('Date from backend (Pacific Time):', dateFromBackend.toLocaleString([], { timeZone: 'America/Los_Angeles'}));Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
同样,我们始终可以使用 Date.toISOString() 将前端日期转换为 ISO UTC 日期:
const frontEndDate = new Date();
const dateToBackend = frontEndDate.toISOString();
console.log('frontEndDate:', frontEndDate.toString() );
console.log('ISO string to send to backend:',dateToBackend);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
858 次 |
| 最近记录: |