从总分钟数计算年份,同时计算leap年

时间:2019-01-31 23:23:01

标签: jquery math time

我正在使用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 )

1 个答案:

答案 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年的分钟长度后找出剩余多少个正常年份。我尚未测试过,但我认为类似的方法也应该起作用。