Haos писал(а):Нюансы.
1. Кол-во месяцев. По сколько дней? Взял 30. Весьма сомнительное дело.
2. Что делать если бары начала и конца временного интервала будут выглядеть таким образом (начало там же где и конец, да еще и своеобразное?
С днями пока пойдет потом найду скрипты которые работают с датами.
С с математической точки зрения с барами серьезный вопрос с практической нет задаются бары за несколько лет или месяцев где уже выражен трейд.
Если нет объективной разницы задается верхняя точка первого раннего во времени и нижняя второго позднего во времени.
Здесь в обоих случаях а больше б по времени.
если бы было наоборот б больше а или равно тогда расчет можно переворачивать.
Для примера в программировании я слаб. Понимаю что язык другой. Просто пример.
Скрипт предназначен для точного вычисления количества лет, месяцев и дней, прошедших с определенной даты, например, дня рождения. Числа, которые получаются в результате вычисления склоняются в соответствии с правилами русского языка. Имеется ограничение: так как используются даты в формате UNIXSTAMP, скрипт работает только с датами после 1 января 1970 года.
<?php
// 24 января 1985 года
$birthday = mktime(0, 0, 0, 1, 24, 1985);
echo birthday($birthday);
// Количество лет, месяцев и дней, прошедших со дня рождения
function birthday($sec_birthday)
{
// Сегодняшняя дата
$sec_now = time();
// Подсчитываем количество месяцев, лет
for($time = $sec_birthday, $month = 0;
$time < $sec_now;
$time = $time + date('t', $time) * 86400, $month++){
$rtime = $time;
}
$month = $month - 1;
// Количество лет
$year = intval($month / 12);
// Количество месяцев
$month = $month % 12;
// Количество дней
$day = intval(($sec_now - $rtime) / 86400);
$result = declination($year, "год", "года", "лет")." ";
$result .= declination($month, "месяц", "месяца", "месяцев")." ";
$result .= declination($day, "день", "дня", "дней")." ";
return $result;
}
// Склонение числа $num
function declination($num, $one, $ed, $mn, $notnumber = false)
{
// $one="статья";
// $ed="статьи";
// $mn="статей";
if($num === "") print "";
if(($num == "0") or (($num >= "5") and ($num <= "20")) or preg_match("|[056789]$|",$num))
if(!$notnumber)
return "$num $mn";
else
return $mn;
if(preg_match("|[1]$|",$num))
if(!$notnumber)
return "$num $one";
else
return $one;
if(preg_match("|[234]$|",$num))
if(!$notnumber)
return "$num $ed";
else
return $ed;
}
?>
Если вам интересно узнать точное количество лет, месяцев и дней, прошедших со дня вашего рождения, воспользуйтесь формой, представленной ниже.
Результат работы скрипта на сайте где написан код.
C 15.02.1976 прошло 40 лет 8 месяцев 9 дней