为什么日期不调整为 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; }
。您可能希望考虑重构此代码 ;)
希望对您有所帮助! :)
在为时钟打印时间时,类似的代码可以工作并针对所选时区进行调整,但这不适用于打印日期。知道为什么吗?
它只是显示 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; }
。您可能希望考虑重构此代码 ;)
希望对您有所帮助! :)