首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器上的日期比本地主机上的日期晚了一天

服务器上的日期比本地主机上的日期晚了一天
EN

Stack Overflow用户
提问于 2019-07-29 21:18:15
回答 2查看 814关注 0票数 1

我刚刚在这家软件公司开始了一份新工作,我们意识到就在几天前,我们的一些服务报告上的日期落后了一天。当我在本地主机上运行应用程序时,所有的日期都是正确的,所以我只能推测问题来自服务器端。

我们已经将所有的日期和时间转换为UTC,所以我不认为这是一个问题。

代码语言:javascript
复制
export const FormatDate = (stringDate) => {
    if (stringDate && stringDate != "") {
        var date = new Date(stringDate);
        if (date.getFullYear() < 2015) { return "" }

        var monthNames = ["Jan.", "Feb.", "Mar.", "Apr.", "May.", "Jun.", "Jul.", "Aug.", "Sep.", "Oct.", "Nov.", "Dec."];
        var dateToPass = monthNames[date.getMonth()] + " " + (date.getDate() ) + ", " + date.getFullYear();

        if (dateToPass === "Jan. 1, 1000") {
            return "";
        }
        return dateToPass;
    }
    return "";
}

这是目前我们设置日期格式的方式。我假设这不会引起任何问题,但我还是对JavaScript有点陌生,所以如果您有任何建议,我们将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-30 03:40:28

您说(在问题注释中)您传入的字符串就像这样的"2019-07-29T05:00:00.000Z"。尾随的Z表示UTC,这是好的。

您已经通过解析该字符串创建了一个Date对象,然后调用getMonthgetDategetFullYear函数。这些函数根据运行代码的计算机的本地时区返回值。因此,您正在进行UTC到本地时间的转换。

您可以简单地切换到getUTCMonthgetUTCDategetUTCFullYear函数。然后,结果将与您在基于UTC的输入字符串中提供的值匹配。

代码语言:javascript
复制
var dateToPass = monthNames[date.getUTCMonth()] + " " + (date.getUTCDate() ) + ", " + date.getUTCFullYear();
票数 0
EN

Stack Overflow用户

发布于 2019-07-29 21:44:13

当您创建新的Data实例时,还会根据您的系统添加当前时区。

例如,考虑以下UTC时间字符串:Mon, 29 Jul 2019 13:00:00 GMT

如果使用此字符串创建新的Date对象,然后获取本地时间,则最终可能会得到不同的时间字符串

代码语言:javascript
复制
const d = new Date('Mon, 29 Jul 2019 13:00:00 GMT')
// this will return string is according to your time zone, i got 16:00:00 GMT+0300
d.toTimeString(); 

因此,您可以使用UTC,但仍然可以为不同的客户端获取不同的时间字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57254758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档