繁体   English   中英

在 C# 中处理 js 本地化日期

[英]Dealing with js localized date in C#

我的应用程序(C# 中的后端和 Angular Materials 中的前端)有一个搜索屏幕,允许用户使用日期选择器指定日期时间段。 问题是一些用户不在英国,而他们查看的所有数据都是用 GMT 日期创建的。 因此,如果德国有人在 datepicker 中选择日期 01/01/2017,我的后端会将其读取为 31/12/2016 23:00:00,从而导致搜索结果不正确。 有人可以建议我如何处理这个问题吗? 我想仍然使用 Angular Material 日期选择器,但请确保我传递的是用户选择的日期。 我知道我可以在发布之前转换日期,如下所示: moment(myDate).format('MM/DD/YYYY'))但我有很多这样的情况,并且更喜欢一些通用的解决方案。

对于传输和存储,我建议对所有内容使用 UTC。 只有在显示时,时间才应转换为用户选择的任何语言环境。 尽管这是一个老问题,但遇到时间转换问题仍然很常见。 我工作过的大多数地方都将所有内容存储为 UTC 时间戳或相对于 UTC 的 Unix 纪元时间,这样就毫无疑问系统中任何地方的含义是什么。 如果/当它需要渲染到本地时,我们会在客户端进行。

例如,要将本地时间转换为 UTC 作为字符串:

var noTimeZone = new Date().toUTCString();

-或者-

var noTimeZone = new Date().toISOString();

或者,如果您想要一个数值,这样您就不必处理客户端/服务器之间的时髦格式解析,您可以获得 Unix 纪元:

var unixEpochMS = new Date().getTime();

请注意,Date.getTime() 将返回毫秒而不是秒。 另请注意,Unix 纪元是根据 UTC 定义的。 也就是说,任何作为时间戳的数值都应该是 UTC。 如果您想要不同的时区,则需要解析该值,然后将时区设置为您想要的。

解决方案 1:我认为解决方案是获取用户的时区。 您可以使用 Javascript 从用户的计算机获取时区并将其随请求发送到服务器。

var d = new Date();
var tz = d.getTimezoneOffset()/-60;

tz将是2 ,如果用户的时区是GM + 2

方案 2:您发送和接收 Unix 时间戳。 但是随后您需要根据用户的时区将时间戳转换为可读的日期/时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM