Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript C语言中js本地化日期的处理#_Javascript_C#_Angular Material - Fatal编程技术网

Javascript C语言中js本地化日期的处理#

Javascript C语言中js本地化日期的处理#,javascript,c#,angular-material,Javascript,C#,Angular Material,我的应用程序(C#中的后端和角度材质中的前端)有一个搜索屏幕,允许用户使用日期选择器指定日期周期。问题是,一些用户不在英国,而他们查看的所有数据都是使用GMT日期创建的。因此,如果德国有人在datepicker中选择日期2017年1月1日,我的后端会将其读取为2016年12月31日23:00:00,从而导致不正确的搜索结果。 有人能告诉我如何处理这件事吗?我仍然希望使用Angular Material datepicker,但请确保传递的是用户选择的日期。我知道我可以在发布之前转换日期,如下所示

我的应用程序(C#中的后端和角度材质中的前端)有一个搜索屏幕,允许用户使用日期选择器指定日期周期。问题是,一些用户不在英国,而他们查看的所有数据都是使用GMT日期创建的。因此,如果德国有人在datepicker中选择日期2017年1月1日,我的后端会将其读取为2016年12月31日23:00:00,从而导致不正确的搜索结果。 有人能告诉我如何处理这件事吗?我仍然希望使用Angular Material datepicker,但请确保传递的是用户选择的日期。我知道我可以在发布之前转换日期,如下所示:
时刻(myDate).format('MM/DD/YYYY'))

但我有很多这样的案例,我更喜欢一些通用的解决方案

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

例如,要将本地时间转换为UTC字符串,请执行以下操作:

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

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

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

请注意,Date.getTime()将返回毫秒而不是秒。还要注意,Unix时代是以UTC为单位定义的。也就是说,作为时间戳的任何数值都应为UTC。如果需要不同的时区,则需要解析该值,然后将时区设置为所需的时区。

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

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

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

如上所述,我已经有了特别的解决方案,因为我可以使用矩(myDate).format('MM/DD/YYYY')将日期作为格式化字符串传递。这样,当用户在后端选择日期时,例如2016年10月1日星期六00:00:00 GMT+0100(GMT夏季时间),我仍然会有正确的日期10/01/2016,但我正在寻找一些通用解决方案。我的代码正在查询旧的遗留系统,因此我无法更改保存日期的方式。他们都是这样的:2013-01-26 11:32:33.070。如果我正确理解了你的帖子,所有数据都存储在GMT时间。如果是这种情况,只需获取用户在javascript中输入的UTC时间。为了解决您的问题,GMT和UTC是同义词。是的,这是正确的,这就是我上面提到的解决方案。今天经过几次测试,这似乎是唯一的解决方法。除非我不知道如何强制javascript忽略时区,并在使用date对象时始终创建UTC/GMT日期。@johnblack我扩展了我的回答,为您提供了更多关于如何操作的想法。希望有帮助!
var d = new Date();
var tz = d.getTimezoneOffset()/-60;