首页 > 解决方案 > 日期在服务器上关闭了一天,但在本地主机上没有

问题描述

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

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

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 还是有点陌生​​,所以任何建议都将不胜感激。

标签: javascriptnode.jsreactjsdatetime

解决方案


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

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

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

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,但仍然会为不同的客户端获得不同的时间字符串。


推荐阅读