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

时间:2017-05-04 09:27:54

标签: javascript c# angular-material

我的应用程序(C#中的后端和Angular Materials中的前端)有一个搜索屏幕,允许用户使用datepickers指定日期。问题是一些用户不在英国,而他们查看的所有数据都是用GMT日期创建的。因此,如果德国有人在datepicker中选择日期01/01/2017,我的后端将其视为31/12/2016 23:00:00,导致搜索结果不正确。 有人可以告诉我如何处理这个问题吗?我还想使用Angular Material datepicker,但请确保我已经通过了用户选择的日期。我知道我可以在发布之前改变日期,如下所示: moment(myDate).format('MM/DD/YYYY')) 但我有很多像这样的情况,并希望有一些通用的解决方案。

2 个答案:

答案 0 :(得分:2)

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

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

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

-OR -

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

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

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

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

答案 1 :(得分:0)

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

var d = new Date();
var tz = d.getTimezoneOffset()/-60;
如果用户的时区为GM + 2,则

tz2

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