为什么日期不调整为 UTC 设置的时间?

Why does the date not adjust to the time set by UTC?

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

它只是显示 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 格式的当前日期和时间。

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

请注意,即使您更新 today 变量 today = new Date(today.getTime() - anHour * -2)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; }。您可能希望考虑重构此代码 ;)

希望对您有所帮助! :)