Расчет года из общего количества минут при учете високосного года - PullRequest
0 голосов
/ 01 февраля 2019

Я собираю генератор файлов ICS, используя jquery.После ввода даты и часового пояса, которые я решил, было бы проще рассчитать общее количество минут, затем преобразовать часовой пояс в Z-время / UTC-0 / GMT и преобразовать общее время в каждую подходящую единицу времени (год, месяц, дату,час и минута).

Мой вопрос касается логики моей функции: это самый эффективный способ выполнить этот расчет, проверки 2018 года?Имейте в виду, что каждый високосный год (текущий год делится на 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 голосов
/ 01 февраля 2019

Может быть, вы могли бы избавиться от некоторых операторов 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, а затем выясните, сколько нормальных лет осталось после вычитания минутной длины високосных лет.,Я не проверял это, но думаю, что-то подобное также должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...