За последние 24 часа нас посетили 18359 программистов и 1613 роботов. Сейчас ищут 2002 программиста ...

Подсчёт количества дней между датой и текущей датой

Тема в разделе "Сделайте за меня", создана пользователем novomaster, 22 фев 2016.

  1. novomaster

    novomaster Новичок

    С нами с:
    22 фев 2016
    Сообщения:
    16
    Симпатии:
    0
    Здравствуйте, помогите с кодом новичку.
    Данные:
    Есть таблица учёта заказов в производстве с несколькими полями.
    Есть поле "Дата начала производства", где вносится дата вручную;
    Есть поле "Текущая дата", где прописан код:
    Код (PHP):
    1. $line['Текущая дата'] = date("Y-m-d 00:00:00"); 
    и таким образом там отображается текущая дата;
    Есть поле "Прошло дней", где нужно прописать код, в результате которого будет отображаться, сколько прошло дней с начала производства до сегодняшнего дня.
    Я прописал такой код:
    Код (PHP):
    1. $line['Прошло дней'] = $line['Текущая дата'] - $line['Дата начала производства']; 
    В результате в поле "Прошло дней" отображается не количество дней, а количество лет.
    Например:
    Дата начала производства: 26.10.2015 // Текущая дата: 21.02.2016 // Прошло дней: 1
    Дата начала производства: 14.02.2011 // Текущая дата: 21.02.2016 // Прошло дней: 5
    Дата начала производства: 01.02.2016 // Текущая дата: 21.02.2016 // Прошло дней: 0

    Помогите прописать правильный код, чтобы считалось - сколько прошло дней со дня начала производства.

    Если это вообще возможно, то я задам ещё вопрос дополнительный (простите за наглость):
    Можно ли ещё это количество дней перевести в более сложную форму:
    Например вместо "Прошло 52 дня" чтобы прописывалось "Прошёл 1 месяц и 2 недели" или вместо "Прошло 54 дня" писалось "Прошёл 1 месяц, 2 недели и 2 дня"?

    P.S. В этих кодах почти совсем не понимаю. Например, чтобы прописать правильно код для текущей даты, сидел читал форумы с утра до поздней ночи, копируя примеры и подставляя в свой код. Случайно что-то получилось )))

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    strtotime()
     
  3. novomaster

    novomaster Новичок

    С нами с:
    22 фев 2016
    Сообщения:
    16
    Симпатии:
    0
    Спасибо, я так понимаю, эта функция исключает что-то лишнее? А как это правильно в моём коде прописать?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    http://php.ru/manual/datetime.diff.html
    http://php.ru/manual/class.dateinterval.html#dateinterval.props
    http://php.ru/manual/dateinterval.format.html#refsect1-date ... parameters

    Код (PHP):
    1. <?php
    2.  
    3. $date1 = new DateTime('2009-01-01');
    4. $date2 = new DateTime('2010-02-07');
    5. $interval = $date2->diff($date1);
    6.  
    7. echo $interval->format('Прошло %y лет, %m месяцев, %d дней, дней всего %a')."<br>";
    8.  
    9. // для склонений удобно сразу получить цифру
    10. echo $interval->y.' прошло лет/год и т. д.';
    Результат:
     
  6. novomaster

    novomaster Новичок

    С нами с:
    22 фев 2016
    Сообщения:
    16
    Симпатии:
    0
    Что-то для моей таблицы это не работает
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Так пиши с какими данными запускал пример, может ты где-то формат не указал или ещё что.
     
  8. novomaster

    novomaster Новичок

    С нами с:
    22 фев 2016
    Сообщения:
    16
    Симпатии:
    0
    Я бы скрин выложил, да не пойму, где здесь вложение файлов

    Добавлено спустя 1 минуту 22 секунды:
    [​IMG]
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    думаю проще текстом код написать, а то мало кто захочет с картинки его перепечатовать

    Добавлено спустя 27 секунд:
    картинку первым дело загрузи в интернет, а тут ссылку дай
     
  10. novomaster

    novomaster Новичок

    С нами с:
    22 фев 2016
    Сообщения:
    16
    Симпатии:
    0
    Вот моя таблица:
    [​IMG]

    Вот код, прописанный для поля "Прошло недель":
    Код (PHP):
    1. $line['Прошло недель'] = (strtotime($line['Текущая дата']) - strtotime($line['Дата начала производства'])) / 604800; 
    Вот код, прописанный для поля "Прошло дней":
    Код (PHP):
    1. $line['Прошло дней'] = (strtotime($line['Текущая дата']) - strtotime($line['Дата начала производства'])) / 86400; 
    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    novomaster мой код вроде проще.

    Вместо текста ('Текущая дата', 'Дата начала производства' и т. д.) нужно вставлять дату.
     
  12. novomaster

    novomaster Новичок

    С нами с:
    22 фев 2016
    Сообщения:
    16
    Симпатии:
    0
    Так дело в том, что я при добавлении новой записи в таблицу не должен больше прописывать никаких вычислений. Код должен срабатывать один и тот же всегда для всех записей.
    А вы предлагаете каждый раз прописывать отдельный код для каждой новой записи?
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ничего не понял
     
  14. novomaster

    novomaster Новичок

    С нами с:
    22 фев 2016
    Сообщения:
    16
    Симпатии:
    0
    Вы предлагаете вместо "Текущая дата" и "Дата начала производства" вставить дату.
    Но ведь текущая дата меняется каждый день пвтоматически, а дата начала производства в каждой записи разная. Получается, что для каждой новой записи в таблице нужно прописывать отдельный код?
     
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Нет, я хотел скопировать код и запустить его, но там не все данные, как тебе тогда помочь? Или тратить время и догадываться с картинки что куда вставить?
     
  16. novomaster

    novomaster Новичок

    С нами с:
    22 фев 2016
    Сообщения:
    16
    Симпатии:
    0
    Объясните, что вы имеете под данными? Какие именно данные Вам нужны?

    В таблице сейчас только два вычисления:

    В поле "Текущая дата":

    Код (PHP):
    1. $line['Текущая дата'] = date("Y-m-d 00:00:00"); 
    И в поле "Всего прошло":

    Код (PHP):
    1. $all_days = (strtotime($line['Текущая дата']) - strtotime($line['Дата начала производства'])) / 86400;
    2. $weeks = floor($all_days/7); // число недель
    3. $days = $all_days % 7; // число дней как остаток
    4. $line['Всего прошло'] = "Прошло $weeks нед. и $days дн."; 
    Этот код помог написать один человек с другого форума. Но там не совсем то, что хотелось бы видеть:

    1) Сейчас показываются недели и дни, а хотелось бы, чтобы если недель 4 и больше, то чтобы показывалиь и месяцы - "Прошло ... месяцев, ... недель и ... дней"
    2) Если получается в результате ровное количество недель, то пишет "... недель и 0 дней". Это как-то выглядит несуразно, хотелось бы, чтобы "0 дней" тогда вообще не показывались.
    3) Не склоняются результаты: "2 недель и 3 дней", например, вместо "2 недели и 3 дня" (в связи с этим я сделал сокращения: вместо "недель" написал "нед.", вместо "дней" написал "дн.")

    По сути, сейчас основная проблема решена, осталось сделать огранку, подредактировать код с учётом этих трёх пунктов.

    Скрин, как выглядит сейчас таблица, прикладываю.

    [​IMG]

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  17. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Вот я давал тебе код viewtopic.php?f=13&t=56833#p457265 его можно запустить и посмотреть результат, с твоим кодом так нельзя.
    Так что мне делать?
     
  18. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
    вот в чем проблема:
    автор не пишет код, он делегирует это парням с форумов, потом других парней просит его усовершенствовать и так далее.

    нафига учиться или платить, когда есть форумы? переношу тему на помойку.
     
  19. novomaster

    novomaster Новичок

    С нами с:
    22 фев 2016
    Сообщения:
    16
    Симпатии:
    0
    artoodetoo, если бы я сам писал коды, я б не обращался за помощью.
    "Не хочу учиться" - неправда. Всегда с удовольствием учусь тому, что мне нужно. В данном случае - это разовая потребность, и штудировать книги месяцами или годами ради одного кода - извините.
    "Не хочу платить" - вам заплатить нужно? Но вы же не предлагали даже свои условия и не обозначили свою цену за помощь. И мимо не прошли. Просто высказали своё Фи, что вам не заплатили. При этом не сделав ни одного шага а тому, чтобы захотелось вам это сделать.
    "Тему на помойку" - я вас понял. Как вам угодно, господин гуру всея форума. Не тратьте время, вам же нужно успеть собрать дань с новичков, которые готовы раскошелиться за пару строчек кода.
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а ты дерзкий... и с чего ты взял что решение - всего пара строчек кода? ты же не программист вроде. откуда оценка объема работ?
     
  21. novomaster

    novomaster Новичок

    С нами с:
    22 фев 2016
    Сообщения:
    16
    Симпатии:
    0
    Я не дерзкий, если нужно заплатить - пишите, сколько и за что. А не разводите пустую демагогию. Раз здесь рынок, так и давайте свои условия. Я обозначил, что мне нужно в результате, а от вас пока ничего конкретного не услышал
     
  22. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты изначально сам разместился вне раздела фриланса и вне этой помойки. значит ожидалось что нашими стараниями ты самостоятельно добьешься цели. оказалось что ты халявщик который собирает с форумов готовые решения. тебя перенесли в соответствующий раздел. что ты обижаешься? ты сам неверно начал.
     
  23. novomaster

    novomaster Новичок

    С нами с:
    22 фев 2016
    Сообщения:
    16
    Симпатии:
    0
    Ладно, закрывайте тему, удаляйте или еще что хотите. Обойдусь без кода, пусть все будет как есть
     
  24. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    молодец. стоило изначально тратить наше время если тебе на самом деле ничего не нужно?
     
  25. novomaster

    novomaster Новичок

    С нами с:
    22 фев 2016
    Сообщения:
    16
    Симпатии:
    0
    Мне не нужна пустая болтовня. Я обратился за помощью, так как сам не умею этого делать, а мне тыкают в лицо тем, что я не заплатил сначала. К чему тогда дальнейший разговор?