簡體   English   中英

Javascript時間和日期根據時區的小時數變化

[英]Javascript time and date change by timezone difference in hours

我有這段代碼,它將更改時間和日期-根據時區差異,例如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 要么需要在別的位置,要么必須檢查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 (今年其他時間)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM