За последние 24 часа нас посетили 18114 программистов и 1696 роботов. Сейчас ищут 1569 программистов ...

Как отнять дату от даты?

Тема в разделе "PHP для новичков", создана пользователем pr0n1x, 22 июн 2007.

  1. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    Например мне нужно от 2007-10-01 отнять 2005-03-10.
    Как это сделать?
     
  2. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Не знаю на сколько это правильно
    PHP:
    1.  
    2. <?php
    3. $date1 = mktime("","","",10,1,2007);
    4. $date2 = mktime("","","",03,10,2005);
    5. $date = $date1-$date2;
    6. echo date("Y-m-d",$date);
    7. ?>
    8.  
     
  3. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    Это совершенно не правильно.
    Нужно, от 2007-10-01 отнять 2005-03-10 чтобы получилась дата которая была примерно 2 года назад 6 месяцев 22 дня тому.
     
  4. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    pr0n1x
    отчего же у него совершенно не правильно?
     
  5. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    вот эта дата: 2005-03-10
     
  6. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    не знаю чего хотел автор темы... но для всех остальных
    шутка юмора:
    PHP:
    1.  
    2. <html>
    3.  
    4. <head>
    5.   <title>Как давно произошёл первый полёт прототипа — Су-27ИБ?!</title>
    6. </head>
    7.  
    8. <body>
    9.  
    10. <?php
    11.  
    12. /* берём текущее время в timestamp */
    13. $actual_time = time();
    14.  
    15. //echo $actual_time; // выводим на экран
    16. //echo "&nbsp;-&nbsp;Текущее время в timestamp <br>";
    17.  
    18. //13 апреля 1991 Первый полёт прототипа — Су-27ИБ (истребитель-бомбардировщик)
    19.  
    20. /* Берём метку времени для этой даты. Предположим, что полёт состоялся полдень */
    21. //$first_flight = mktime(12, 0, 0, 4, 12, 1991); // первый вариант
    22. $first_flight = strtotime("1991-04-12"); // второй вариант
    23.  
    24. //echo $first_flight; // выводим на экран
    25. //echo "&nbsp;-&nbsp;Первый полёт прототипа — Су-27ИБ в timestamp <br>";
    26.  
    27. /* Рассчитываем как давно в секндах произошёл полёт этого красавца */
    28. $past_time = $actual_time - $first_flight;
    29.  
    30. //echo $past_time; // выводим на экран
    31. //echo "&nbsp;-&nbsp;Столько секунд назад состоялся первый полёт прототипа — Су-27ИБ<br>";
    32.  
    33. /* Переводим в нормальную дату */
    34.  
    35. $minutes = floor($past_time/60); // кол-во полных минут
    36. $hours = floor($minutes/60); // кол-во полных часов
    37. $days = floor($hours/24); // кол-во полных дней
    38. $years_unfull = $days/365; // кол-во неполных лет
    39. $years = floor($days/365); // кол-во полных лет
    40. $months = floor($years_unfull*12); // кол-во полных месяцев
    41.  
    42. $m = $months - ($years*12); // месяцев сверху
    43. $d =
    44.  
    45. $days_in_months = array(1=>31, 2=>28, 3=>31, 4=>30, 5=>31, 6=>30, 7=>31, 8=>31, 9=>30, 10=>31, 11=>30, 12=>31);
    46.  
    47. $leap_years = floor($years/4); // кол-во високосных годов
    48.  
    49. $month_number_in_first_flight = date("n", $first_flight);
    50.  
    51.  
    52. /* кол-во дней прошедших в году */
    53. $days_in_year_of_first_flight = 0;
    54. for($i=1; $i<=12; $i++)
    55. {
    56.     if($i >= $month_number_in_first_flight)
    57.     {
    58.         $days_in_year_of_first_flight = $days_in_year_of_first_flight + $days_in_months[$i];
    59.     }
    60. }
    61. $days_in_year_of_first_flight - 12; // отнимаем кол-во дней которые уже прошли
    62. /* кол-во дней прошедших в году */
    63. $days_in_years_interval = (date("Y") - 1991 - 1) * 365;
    64.  
    65. $days_in_actual_year = 0;
    66. for($i=1; $i<=12; $i++)
    67. {
    68.     if($i < date("n"))
    69.     {
    70.         $days_in_actual_year = $days_in_actual_year + $days_in_months[$i];
    71.     }
    72. }
    73.  
    74. /* Что там у нас получилось */
    75.  
    76. $d = $days - ($days_in_actual_year + $days_in_year_of_first_flight + $days_in_years_interval) - $leap_years;
    77.  
    78.  
    79. echo "С момента первого полёта прототипа — Су-27ИБ прошло $years лет, $m месяца и $d дней";
    80.  
    81. ?>
    82.  
    83. </body>
    84.  
    85. </html>
    86.  
    сам у себя потом спросил - чо курил?!

    если нормально так подумать, то можно функцию вычитания дат написать, без особых проблем... В том смысле, чтобы узнать сколько дней прошло с того или иного события...
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    что-то Hight зажигает в каждой теме. Пятница пришла что ли?
     
  8. wir_wolf

    wir_wolf Активный пользователь

    С нами с:
    10 янв 2009
    Сообщения:
    183
    Симпатии:
    0
    Я пишу функцию которая выводит сколько времени человека не было в клубе.
    Взял Hight исходник.
    PHP:
    1. <?
    2. function time_old($login_time)
    3. {$cus_date = date("Y")."-".date("m")."-".date("d")." ".date('H:i:s');
    4.  /* Берём метку времени для этой даты.*/
    5. $actual_time = strtotime($login_time);
    6.  
    7.  /* Берём метку времени для текущей даты.*/
    8. $cus_date_1 = strtotime($cus_date);
    9. /* Рассчитываем как давно в секндах перс не заходил в бк */
    10.  $past_time = $cus_date_1 - $actual_time;
    11. /*Выводим то что получилось*/
    12. echo $past_time;
    13. /* Переводим в нормальную дату */
    14.  
    15.  $minutes = floor($past_time/60); // кол-во полных минут
    16.  $hours = floor($minutes/60); // кол-во полных часов
    17.  $days = floor($hours/24); // кол-во полных дней
    18.  $years_unfull = $days/365; // кол-во неполных лет
    19.  $years = floor($days/365); // кол-во полных лет
    20.  $months = floor($years_unfull*12); // кол-во полных месяцев
    21.  
    22.  $m = $months - ($years*12); // месяцев сверху
    23.  $d =
    24.  
    25.  $days_in_months = array(1=>31, 2=>28, 3=>31, 4=>30, 5=>31, 6=>30, 7=>31, 8=>31, 9=>30, 10=>31, 11=>30, 12=>31);
    26.  
    27.  $leap_years = floor($years/4); // кол-во високосных годов
    28.  
    29.  $month_number_in_first_flight = date("n", $first_flight);
    30.  
    31.  
    32.  /* кол-во дней прошедших в году */
    33.  $days_in_year_of_first_flight = 0;
    34.  for($i=1; $i<=12; $i++)
    35.  {
    36.      if($i >= $month_number_in_first_flight)
    37.      {
    38.          $days_in_year_of_first_flight = $days_in_year_of_first_flight + $days_in_months[$i];
    39.      }
    40.  }
    41.  $days_in_year_of_first_flight - 12; // отнимаем кол-во дней которые уже прошли
    42.  /* кол-во дней прошедших в году */
    43.  $days_in_years_interval = (date("Y") - 1991 - 1) * 365;
    44.  
    45.  $days_in_actual_year = 0;
    46.  for($i=1; $i<=12; $i++)
    47.  {
    48.      if($i < date("n"))
    49.      {
    50.          $days_in_actual_year = $days_in_actual_year + $days_in_months[$i];
    51.      }
    52.  }
    53.  
    54.  /* Что там у нас получилось */
    55.  
    56.  $d = $days - ($days_in_actual_year + $days_in_year_of_first_flight + $days_in_years_interval) - $leap_years;
    57.   echo '<br>';
    58.  
    59.  echo "($years г. $m м. $d д. назад)";
    60.  
    61. }
    62. ?>
    Результат получился не очень.
    275241
    (0 г. 0 м. -7083 д. назад)
    в чем косяк скрипта, и как сделать чтобы оно еще подщитывало часы, минуты и секунды?
     
  9. ekip

    ekip Активный пользователь

    С нами с:
    11 авг 2009
    Сообщения:
    118
    Симпатии:
    0
    Я придумал вот такое решение :)

    PHP:
    1. <?php
    2. $date1 = '02-10-2007';
    3. $date2 = '10-03-2005';
    4. function unix_time_convert ($timestamp)
    5. {
    6. $date = date ("d.m.Y" , $timestamp);
    7. return $date;
    8. }
    9. function time_convert ($timing)
    10. {
    11. $date_time  = explode("-",$timing);
    12. $data_unix = mktime(0,0,0,$date_time[1],$date_time[0],$date_time[2]);
    13. return $data_unix;
    14. }
    15. $data1_unix = time_convert ($date1);
    16. $data2_unix = time_convert ($date2);
    17. $date3_unix = $data1_unix - $data2_unix;
    18. $date3 = unix_time_convert($date3_unix);
    19. if (ereg ("([0-9]{1,2}).([0-9]{1})([0-9]{1}).([0-9]{4})", $date3, $time))
    20. $times1 = $time[4] - 1970;
    21. $times2 = $time[3] - 01;
    22. $times3 = $time[1] - 01;
    23. echo ''.$times3.' дня '.$times2.' месяцев '.$times1.' года';
    24. ?>
    Можно записывать и получать в формате 01-10-2007 12:34:40 и перебирать потом, будет просчитывать в плоть до секунд.
     
  10. jan1213

    jan1213 Guest

    The Battered-Body Trick
      This is a story from Three Kingdoms that happened before the Battle of Chibi. One night, Zhou Yu was thinking hard in his tent about how to defeat Cao Cao's army, when Huang Gai came in . He suggested attacking with fire. “Well, it's exactly what I mean to do.” Said Zhou Yu. “That's why I'm keeping those two spies: to convey false information to Cao's camp. But I need a man to play the same game for us.” Huang Gai said he was willing to do it. They decided to carry out the trick of being flogged to win the enemy's confidence.
    replica sunglasses,
      the next day Zhou Yu convened a general assembly of his commanders outside his tent.replica sunglasses He ordered the commanders to take three months's rations and prepare to defend their line. Huang Gai came forward and said: “We don't need three months. If not, we'd better throw down our weapons and sue for peace.”
    aoc gold,
      Zhou Yu exploded in fury.aoc gold “Ibear our lord's mandate,” he cried, “to lead our troops to destroy Cao Cao. How dare you weaken our morale? Remove him and execute him!”
      Huang Gai proudly, “I have served the Southland through three successive reigns. Where do the likes of you come from?”
    age of conan power leveling,
      the entire assembly got on their knees to intercede for Huang Gai.age of conan power leveling Zhou Yu said at last: “In consideration for the commanders' views, I shall not kill you. Give him one hundred strokes across the back!”
    aion gold,
      Huang Gai was forced facedown to the ground. Not yet at fifty blows of the rod,aion gold his skin was broken and his oozing flesh was crossed with welts. He fainted several times.
    maple story mesos,
      Zhou Yu let Kan Ze,maple story mesos Huang Gai's friend, to deliver the letter of surrender to Cao Cao, which Huang Gai had prepared. Before long, Cao Cao received a letter from the two spies, saying “Look for a boat with a blue-GREen flag at the bow. That will be Huang Gai.” In Huang Gai's boat there were combustibles. In this way, Huang Gai was able to set fire to Cao Cao's camp. When the red current of fire passed through the surface of the river, Cao Cao's ships, linked with chains,dog clothes turned into ashes.
    dog clothes,