首页 > 解决方案 > 更正不同时区的错误日期(浏览器与服务器)

问题描述

我刚刚意识到我的代码有一个很大的问题。我有一个用户写日期的输入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) 


   }

请帮我

标签: javascript

解决方案


这个问题的一般规则是:

使用UTC仅在表示层(前端)上进行转换

您必须始终发送 UTC timestamp,当具有不同语言环境的浏览器需要呈现它时,将其转换为反映浏览器的时区。

MomentJS等库默认使用浏览器时区执行此操作:

默认情况下,moment 对象是在本地时区创建的。


推荐阅读