javascript - 更正不同时区的错误日期(浏览器与服务器)
问题描述
我刚刚意识到我的代码有一个很大的问题。我有一个用户写日期的输入vm.startDate
。
我需要使用此日期(以毫秒为单位)发出请求url + startDate
。
API 服务器托管在 UCT +2 上,而我在 UCT+0 的浏览器上,所以我以毫秒为单位生成了错误的日期(当我在线检查 ms 到日期时,小时是错误的)。
我该如何解决这个问题?我应该根据服务器的部署位置添加小时吗?
// By default select the today's date
var todayDate = new Date();
var day = todayDate.getDate();
var month = todayDate.getMonth() + 1;
var year = todayDate.getFullYear();
vm.startDate = day + "." + month + "." + year; // assign default date
$scope.$watch("vm.startDate", function() {
console.log(vm.startDate);
if(vm.startDate != null) {
// Concat 00:00:00 time
var startDate = vm.startDate.split(".");
startDate = new Date(startDate[2], startDate[1] - 1, startDate[0]);
startDate = startDate.getTime(); // Time in ms
console.log("Time in ms: " + startDate);
// Get File In Data
$http.get(url + startDate).then(..... Stuff)
}
请帮我
解决方案
这个问题的一般规则是:
使用UTC并仅在表示层(前端)上进行转换
您必须始终发送 UTC timestamp,当具有不同语言环境的浏览器需要呈现它时,将其转换为反映浏览器的时区。
MomentJS等库默认使用浏览器时区执行此操作:
默认情况下,moment 对象是在本地时区创建的。
推荐阅读
- pandas - 如何将函数应用于熊猫数据的每两列并返回一个新的数据框
- python - 如何在PLT中保存图像
- python - TensorFlow 迁移学习加载 TFRecordDataset
- node.js - 如何重新打开nodejs服务器信息
- listview - 如何为ListView UWP中的每一行设置颜色差异指针
- html - 如何在 Bootstrap 表中垂直对齐文本
- php - 使用 SimpleXML/DOM 通过 php 将节点从一个 XML 复制到另一个
- c++ - 我调用了av_probe_input_format3(),现在我想调用avcodec_find_decoder(),如何在编解码器中转换格式?
- github - GitHub 发布、多个文件和版本控制
- flutter - 如何在右侧领先的 listTitle 中设置图像?