我正在使用jquery将ICS文件生成器放在一起。输入日期和时区后,我认为最简单的方法是计算总分钟数,然后将时区转换为Z-time / UTC-0 / GMT并将总时间重新转换为每个合适的时间单位(年,月,日,小时和分钟)。
我的问题与我的职能逻辑有关:这是进行2018年检查的最有效方法吗?请记住,每个leap年(当前年可被4整除)有527040分钟,而普通年(不可被4整除)有525600分钟。
var timeTot = 1061911800; // for debug
var uyear = 1; // DODGE DIVIDE BY ZERO ERROR
while (timeTot >= 525600 || timeTot >= 527040) {
if (uyear % 4 != 0) { // is common year?
timeTot -= 525600;
uyear++;
} else if (uyear % 4 == 0) { // is leap year?
timeTot -= 527040;
uyear++;
} else {
//infinite loop!
timeTot = 0;
}
}
uyear -= 1; // UNDODGE DIVIDE BY ZERO
// uyear is 2018 ( 1/1/2019@00:00 UTC-6 )
答案 0 :(得分:1)
也许您可以摆脱一些if语句:
var timeTot = 1061911800; // for debug
var uyear = 1; // DODGE DIVIDE BY ZERO ERROR
var difference = 527040-525600 // you can name this differently
while (timeTot >= 525600 || timeTot >= 527040) {
timeTot -= 525600
if(uyear % 4 == 0) {
timeTot -= difference
}
uyear++
}
uyear -= 1; // UNDODGE DIVIDE BY ZERO
// uyear is 2018 ( 1/1/2019@00:00 UTC-6 )
这个也要短一点。
尽管,考虑到这一点,您也可以像这样进行:
var timeTot = 1061911800; // for debug
var uyear = 1; // DODGE DIVIDE BY ZERO ERROR
var difference = 527040-525600 // you can name this differently
var leaps = Math.floor(timeTot/527040) // amount of leap years
uyear = leaps + Math.floor((timeTot-leaps*527040)/525600)
因此,基本上,您首先要找出timetTot中有多少个leap年,然后在减去the年的分钟长度后找出剩余多少个正常年份。我尚未测试过,但我认为类似的方法也应该起作用。