我有这个代码,它是根据时区差异更改时间和日期,例如5
小时(由/////TIME ZONE DIFFERECEN/////
表示),但它不按我期望的方式运行;例如:在适用的情况下不更改日期和时间。有人能帮忙吗。
var dateObj = new Date();
var month = dateObj.getUTCMonth() + 1; //months from 1-12
var day = dateObj.getUTCDate();
var year = dateObj.getUTCFullYear();
var months = ["31"];
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
months.push("29");
} else {
months.push("28");
}
monthsappend = ["31", "30", "31", "30", "31", "31", "30", "31", "20", "31"];
months.concat(monthsappend);
time = "7:00pm";
var hours = Number(time.match(/^(d+)/)[1]);
var minutes = Number(time.match(/:(d+)/)[1]);
var AMPM = time.match(/s?([AaPp][Mm]?)$/)[1];
var pm = ['P', 'p', 'PM', 'pM', 'pm', 'Pm'];
var am = ['A', 'a', 'AM', 'aM', 'am', 'Am'];
if (pm.indexOf(AMPM) >= 0 && hours < 12) hours = hours + 12;
if (am.indexOf(AMPM) >= 0 && hours == 12) hours = hours - 12;
var sHours = hours.toString();
var sMinutes = minutes.toString();
if (hours < 10) sHours = "0" + sHours;
if (minutes < 10) sMinutes = "0" + sMinutes;
timearr = [sHours, sMinutes];
timearr[0] += 5;
/////////////////////////////// TIME ZONE DIFFERENCE////////////////////////////
if (time.toLowerCase().includes("pm")) {
}
if (timearr < 0) {
day -= 1;
if (day == 0) {
month -= 1;
if (month == 0) {
month = 12;
year = dateObj.getFullYear() - 1;
}
day = months[month - 1];
}
} else {
if (timearr => 24) {
timearr[0] = 24 - timearr[0];
if (day == months[month - 1]) {
day = 1;
month += 1;
if (month == 12) {
month = 1;
year += 1;
}
}
}
}
newdate = day + "/" + month + "/" + year;
console.log(newdate);
console.log(timearr[0]);
好吧,首先我要指出错误:
- 您有一个箭头函数
=>
,而不是大于或等于运算符>=
(感谢RobG) - 您将
timearr
同时视为一个数组,然后再将其视为单个数字。我想你是想比较一下timearr[0]
- 当你加上5个小时,你就是在串联字符串。
"19" + 5 === "195"
。你需要在这里使用数字,而不是字符串 - 您忘记在大型
if
语句的第一部分中调整timearr[0]
- 当您在大
if
的第二部分中调整timearr[0]
时,您可以按相反的顺序进行减法。(24 - 26 === -2
,你可能是指26 - 24 === 2
) - 最后,在检查
if (month == 12)
之前递增month += 1
。要么它需要在else中,要么你必须检查month === 13
- 在
===
更合适的地方使用==
- 您在声明
timearr
时忘记了var
- 您采用了当前日期,但对时间进行了硬编码
总的来说,您似乎正在尝试以天/月/年的格式在UTC+5输出当前日期。有很多更简单的方法可以满足你的要求。例如:
// Get the current moment in time, as a Date object.
var d = new Date();
// Add 5 hours of absolute duration. The setter handles the bubbling for you.
// Be sure to use UTC here, to avoid interference from transitions of the local time zone.
d.setUTCHours(d.getUTCHours() + 5);
// Get the properties we want to display.
var year = d.getUTCFullYear();
var month = d.getUTCMonth() + 1;
var day = d.getUTCDate();
// Construct the string for output in the desired format.
var s = day + '/' + month + '/' + year;
或者使用Moment.js:
var s = moment().utcOffset(5).format('D/M/YYYY');
请记住"时区!=偏移量"。碰巧,目前世界上所有使用UTC+5
的地方(例如巴基斯坦)全年都在使用它,但如果你说的是美国东部时间,那么一年中某些时候的UTC-5
和其他时间的UTC-4
。