【问题标题】:Why does the date not adjust to the time set by UTC?为什么日期没有调整到 UTC 设置的时间?
【发布时间】:2017-07-25 22:20:04
【问题描述】:

打印时钟的时间时,类似的代码可以工作并针对所选时区进行调整,但这不适用于打印日期。知道为什么吗?

它只显示 UTC 默认时间。

<script>
    function cetDT(){

var now = new Date();
var today = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),  now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());

var day = today.getDate();
var month = today.getMonth();
var year = today.getFullYear();

var anHour = 1000 * 60 * 60;
today = new Date(today.getTime() - anHour * -2);

var hours = today.getHours();
var minutes = today.getMinutes();
var seconds = today.getSeconds();

if (hours >= 12){
meridiem = "";
}
else {
meridiem = "";
}


if (minutes<10){
minutes = "0" + minutes;
}
else {
minutes = minutes;
}

if (seconds<10){
seconds = "0" + seconds;
}
else {
seconds = seconds;
}

document.getElementById("cetDT").innerHTML = (day + '/' + (parseFloat (month) + 1) + '/' + year);

}

cetDT();
</script>

【问题讨论】:

  • 您正在使用now.getUTCDate()now.getUTCHours(),它们将获取UTC 格式的当前日期和时间。 getDategetHours 等将获取与时区相关的时间。
  • 但我稍后也会用“today = new Date(today.getTime() - anHour * -2);”对其进行修改。或者至少我正在尝试....有什么建议吗?
  • 这段代码有很多地方有问题。你到底想完成什么?
  • 是的,这是一团糟,但稍后会清理干净。这是我自己的一个项目:)
  • 了解 StackOverflow 的使命是为广大受众提供有用的问答对。它不是关于转储代码并要求其他人找到错误。上面的代码甚至没有输出询问的变量。你也没有表现出任何研究努力。以目前的形式,它很可能(并且应该)被否决。请阅读帮助中心文档中的How do I ask a good question?How to create a Minimal, Complete, and Verifiable example

标签: javascript date time utc


【解决方案1】:

您正在使用 now.getUTCDate()now.getUTCHours() 和类似名称,它们将获取 UTC 格式的当前日期和时间。

要获得本地等效项,您需要查找 now.getDate()now.getHours() 等。请注意名称中缺少“UTC”。

请注意,即使您使用today = new Date(today.getTime() - anHour * -2)更新today 变量,today 也会更早地使用 UTC 时间进行初始化。因此,getTime() 将与 UTC 相关。

要解决这个问题,您只需换掉 UTC 时间:

function cetDT() {

  var now = new Date();
  var today = new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds());

  var day = today.getDate();
  var month = today.getMonth();
  var year = today.getFullYear();

  var anHour = 1000 * 60 * 60;
  today = new Date(today.getTime() - anHour * -2);

  var hours = today.getHours();
  var minutes = today.getMinutes();
  var seconds = today.getSeconds();

  if (hours >= 12) {
    meridiem = "";
  } else {
    meridiem = "";
  }


  if (minutes < 10) {
    minutes = "0" + minutes;
  } else {
    minutes = minutes;
  }

  if (seconds < 10) {
    seconds = "0" + seconds;
  } else {
    seconds = seconds;
  }

  document.getElementById("cetDT").innerHTML = (day + '/' + (parseFloat(month) + 1) + '/' + year);

}

cetDT();

请注意,还有一些完全冗余的代码,例如else { seconds = seconds; }。您可能希望考虑重构此代码;)

希望这会有所帮助! :)

【讨论】:

  • 所以当换出 UTC 时间时,我必须指定一个时区,如果我是正确的?我很抱歉听起来像个初学者,但我一直在研究这段代码,我不明白要替换什么来更改时区。
  • 尽管问题很糟糕,但请注意,最好始终使用基于 UTC 的函数,而不是基于本地时间的函数。没错,它们需要一致地使用,但是本地时间函数将始终采用本地时区的行为,包括任何有效的夏令时规则。由于 OP 似乎希望从 UTC 偏移固定的小时数,因此应该使用 UTC 作为基础。
  • @ebkod - 你甚至没有显示时区。您显示一个固定的偏移量-2。这与时区非常不同。请阅读the timezone tag wiki
  • 关于 UTC 偏移量,我认为 OP 试图计算他们 自己的 时区的时差。是的,夏令时等可能会引起一些问题,对于在多个国家/地区拥有用户的网站,UTC 时间会更好地贯穿始终。我完全同意马特的观点——-2new Date() 的任意偏移量。只需对JavaScript Dates 进行一些研究,您就会很快了解它 :)
猜你喜欢
  • 2017-10-10
  • 2021-04-26
  • 2011-06-25
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
  • 2013-05-09
相关资源
最近更新 更多