angular - 在Angular中解析日期时间字符串
问题描述
我构建了一个读取 SQL Server 中的 DateTime 字段的 Golang 服务器,它返回给我这种日期:“2020-05-28T11:14:26.227Z”,但是当我尝试在 TypeScript\Angular 中解析时,它返回给我这个:“ 28-05-2020 13 :14:26:227" 看起来增加了 2 小时。
也许是错误的时区?如何设置正确的时区?
数据库和角度应用程序都在我的电脑中(同一时区)
解决方案
在服务器和 JavaScript 之间共享 DateTime 是正确的 PITA。我想忽略时区,并且觉得不需要整个库,例如 Moment,所以我为 Angular 编写了一个转换助手,如下所示:
在 JavaScript 中转换从服务器接收到的日期:
// Reverse the timezone offset (this might only work for timezones earlier than GMT - so test)
this.translateToClient = function (input) {
if (!input) return null;
let result = new Date(Date.parse(input));
result.setMinutes(result.getMinutes() + result.getTimezoneOffset());
return result;
};
在 JavaScript 中转换日期以发送回服务器:
// Send back UTC time instead of timezone time.
this.translateToServer = function (input) {
if (!input) return null;
return new Date(Date.UTC(
input.getFullYear()
, input.getMonth()
, input.getDate()
, input.getHours()
, input.getMinutes()
, input.getSeconds()
, input.getMilliseconds()
));
};
注意:一些服务器技术(例如 ASP.NET)也可以自动应用时区偏移,这也必须正确配置。
我发现我需要像这样将我的 DateTime 发送给客户端:
DateTime.SpecifyKind(MyValue, DateTimeKind.Utc);
推荐阅读
- swift - 如何从另一个视图swiftui中传递字段文本值
- python - 处理结构数据的最佳策略?
- html - 通过视口元标记进行 Ionic v4 页面缩放
- json - 雪花:如何在外部 S3 阶段创建 json 文件的视图
- javascript - 使用多个参数从 HTML 调用 javascript 函数
- java - 在 selenium java POM 项目中不使用 testng.xml 文件并且仅使用 pom.xml 文件可以执行吗?
- android - 如何以编程方式更改 Android App 中 Activity 的语言环境
- javascript - 有没有更好的方法来提高在一个对象中包含多个数组的算法的复杂性
- json - 是否有用于过滤 JSON pcap 的工具或 wireshark 插件?
- powershell - 在 AD 查询上使用 Foreach-Object,比较管道变量