我的应用程序(C#的后端和Angular Materials的前端)有一个搜索屏幕,允许用户使用日期选择器指定日期期限。问题在于,某些用户不在英国,而他们查看的所有数据都是用格林尼治标准时间创建的。因此,如果德国某人在datepicker中选择日期为01/01/2017,则我的后端将其读取为2016年12月31日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。如果要使用其他时区,则需要解析该值,然后将时区设置为所需的时区。
关于javascript - 在C#中处理js本地化日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43778974/