我的时间转换关闭了吗,我该如何解决?

时间:2019-06-19 08:08:39

标签: javascript

当前将unix时间从API转换为可读时间。我不确定是否重要,但是API提供的时间是UTC。当前耗时的代码如下:

let start = new Date(api.startUTC * 1000);
let end = new Date(api.endUTC * 1000);

其余代码主要用于格式化时间:

let TimeDate = {
                hours: function hours(i) {
                  return "0" + i.getHours();
                },
                minutes: function minutes(i) {
                  return "0" + i.getMinutes();
                },
                seconds: function seconds(i) {
                  return "0" + i.getSeconds();
                },
                date: function date(i) {
                  return "0" + i.getDate();
                },
                month: function month(i) {
                  return "0" + i.getMonth();
                },
                year: function year(i) {
                  return i.getFullYear();
                }
              };

              // TIME AND DATE FORMATS

              // Date of Pass
              let passDate = `${TimeDate.date(start).substr(
                -2
              )}/${TimeDate.month(start).substr(-2)}/${TimeDate.year(
                start
              )}`;
              // Time of start of Pass
              let startPass = `${TimeDate.hours(start).substr(
                -2
              )}:${TimeDate.minutes(start).substr(
                -2
              )}:${TimeDate.seconds(start).substr(-2)}`;
              // Time of End of Pass
              let endPass = `${TimeDate.hours(end).substr(
                -2
              )}:${TimeDate.minutes(end).substr(-2)}:${TimeDate.seconds(
                end
              ).substr(-2)}`;

因此,如果API返回1561020080,则上述代码的转换将其显示为 May 2019年20月20日的 10 :41:20,这没有意义,因为它应该在将来预测事件。我将其放入网站like this one中,返回的时间是 06 2019年20月20日的 08 :UTC。在做,更有意义。

看来我的成绩落后了一个月,又领先了两个小时。我不知道为什么会这样,并且我不确定上面提供的代码是否有问题,或者是否应该在结果中添加更多数字以匹配从该外部网站获得的答案。实际上,我什至不确定外部网站是否正确,但这比我得到的结果更有意义。

我也知道存在诸如moment.js之类的东西,但是我只是在自学这一切的工作方式,我宁愿自己做,这样我也可以学到更多。

非常感谢您的帮助!

编辑:我只想补充一点,我认为时间可能已经过时了,因为from what I understand,它已从UTC转换为我的当地时间。我无法解释为什么它显示落后一个月。我的计算机的日期/时间准确无误。

1 个答案:

答案 0 :(得分:0)

您使用的吸气剂基于时区,浏览器使用您当前的时区。有像getUTCHours()这样的时区独立获取器。这应该可以解决小时的问题。

另一个问题是月份是从0开始的。这意味着一月是0,二月是1,...因此您必须在月份中加1才能获得正确的数字表示形式。

您的代码应如下所示:

let start = new Date(api.startUTC * 1000);
let end = new Date(api.endUTC * 1000);

let TimeDate = {
    hours: function hours(i) {
      return "0" + i.getUTCHours();
    },
    minutes: function minutes(i) {
      return "0" + i.getUTCMinutes();
    },
    seconds: function seconds(i) {
      return "0" + i.getUTCSeconds();
    },
    date: function date(i) {
      return "0" + i.getUTCDate();
    },
    month: function month(i) {
      return "0" + (i.getUTCMonth() +1);
    },
    year: function year(i) {
      return i.getUTCFullYear();
    }
};

// TIME AND DATE FORMATS

// Date of Pass
let passDate = `${TimeDate.date(start).substr(
-2
)}/${TimeDate.month(start).substr(-2)}/${TimeDate.year(
start
)}`;
// Time of start of Pass
let startPass = `${TimeDate.hours(start).substr(
-2
)}:${TimeDate.minutes(start).substr(
-2
)}:${TimeDate.seconds(start).substr(-2)}`;
// Time of End of Pass
let endPass = `${TimeDate.hours(end).substr(
-2
)}:${TimeDate.minutes(end).substr(-2)}:${TimeDate.seconds(
end
).substr(-2)}`;