Перейти к содержимому


Как автоматически отображать в отдельном поле таблицы текущую дату?

текущая дата

Сообщений в теме: 19

#1 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 21 Февраль 2016 - 21:21

У меня есть таблица по каждому заказу в производстве.
Там есть поля "Дата начала производства" и "Предполагаемая дата окончания производства".
Добавляю поле "Прошло дней...", хочу, чтобы там отображалось, сколько прошло дней с даты начала производства.
Для этого, я так думаю, мне нужно создать отдельное поле "Текущая дата", а потом вычисление для поля №Прошло дней" в таком виде:
$line['Прошло дней'] = $line['Текущая дата'] - $line['Дата начала производства'];

Вопрос: а как сделать, чтобы в поле "Текущая дата" отображалась именно текущая дата, изменяясь каждый день автоматически?

По форуму искал, но нашёл более сложные вопросы и ответы, пытался оттуда вычленить коды для текущей даты, но ничего не происходит, кроме "Ошибка в вычислении"

#2 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 21 Февраль 2016 - 21:30

Да, вот прописал такое вычисление:
$line['Текущая дата'] = {текущая дата}
Не работает, пишет ошибку:

Ошибка в вычислении.


Производство.Текущая дата :

1: $line['f5521'] = {текущая дата}
syntax error, unexpected '{'


#3 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 21 Февраль 2016 - 21:31

$line['Текущая дата'] = date ("Y-m-d 00:00:00") Тоже не работает (((

#4 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 21 Февраль 2016 - 23:46

Так, текущую дату получилось вставить:
$line['Текущая дата'] = date("Y-m-d 00:00:00");

А вот вычисление, сколько прошло дней не получается:

$line['Прошло дней'] = $line['Текущая дата'] - $line['Дата начала производства']

Выдаёт ошибку:

Ошибка в вычислении.

Производство.Текущая дата
Производство.Прошло дней :

1: $line['f5531'] = $line['f5521'] - $line['f5461']
syntax error, unexpected end of file

Сообщение отредактировал novomaster: 21 Февраль 2016 - 23:52


#5 GoGPS

    Активный участник

  • Пользователи
  • PipPipPip
  • 159 сообщений
  • Пол:Мужчина

Отправлено 21 Февраль 2016 - 23:51

точку с запятой забыли в конце поставить.

#6 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 21 Февраль 2016 - 23:58

Всё, с ошибкой разобрался: надо было в конце кода точку с запятой поставить.
Однако, само вычисление работает неправильно.

Вот код:

$line['Прошло дней'] = $line['Текущая дата'] - $line['Дата начала производства'];

А вот, что высчиталось:
C:\Users\Андрей\YandexDisk\Скриншоты\Прошло%20дней.png

Прикрепленные изображения

  • Прикрепленное изображение: Прошло дней.png

Сообщение отредактировал novomaster: 21 Февраль 2016 - 23:59


#7 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 22 Февраль 2016 - 00:02

Ага, допёрло. Теперь совсем страшно стало:

У меня в поле "Прошло дней" считается не сколько дней прошло, а сколько ЛЕТ ))))

Блин, как же это изменить на дни???

#8 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 22 Февраль 2016 - 09:57

Всем здравствуйте.
В общем, потеряв полночи, методом тыка и с помощю калькулятора изменил код и вот, что получилось:
$line['Прошло дней'] = (strtotime($line['Текущая дата']) - strtotime($line['Дата начала производства'])) / 86400;

Прикрепленные изображения

  • Прикрепленное изображение: Вычисляет количество дней.png


#9 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 22 Февраль 2016 - 10:01

Теперь встала новая дилемма: Как отображение количества дней преобразовать в месяцы, недели и дни?
Ну то есть:
- вместо "Прошло 119 дней" должно отображаться "Прошло 3 месяца, 3 недели и 6 дней"?
Или хотя бы в недели + дни

#10 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 22 Февраль 2016 - 13:54

Да очень просто: делите дни на 7 - получаете недели. Остаток от деления - оставшиеся дни.

#11 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 22 Февраль 2016 - 14:10

Просмотр сообщенияCbCoder (22 Февраль 2016 - 13:54) писал:

Да очень просто: делите дни на 7 - получаете недели. Остаток от деления - оставшиеся дни.
Так и сделал, но тогда получается такой результат:

"Прошло 8,14 недель"
"Прошло 0,57 недель"

и так далее.

То есть отображаются либо дни, либо недели.
Для отображения дней вот такой у меня код:
$line['Прошло дней'] = (strtotime($line['Текущая дата']) - strtotime($line['Дата начала производства'])) / 86400;
А для отображения недель вот такой:
$line['Прошло недель'] = (strtotime($line['Текущая дата']) - strtotime($line['Дата начала производства'])) / 604800;
В итоге у меня сейчас 2 колонки, в одной из которых указываются недели, а во второй - дни (скрин прикладываю).
Мне нужна одна колонка, в которой будет указываться "Прошло ... месяцев, ... недель и ... дней"
или хотя бы "Прошло ... недель и ... дней"

Прикрепленные изображения

  • Прикрепленное изображение: Прошло недель и дней.png


#12 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 22 Февраль 2016 - 15:01

А округление то кто вам мешает делать? Это само собой подразумевалось.

#13 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 22 Февраль 2016 - 15:29

Просмотр сообщенияCbCoder (22 Февраль 2016 - 15:01) писал:

А округление то кто вам мешает делать? Это само собой подразумевалось.

Видимо, я дурак.
Ну вот установил я округление, например, получилось вместо "Прошло 8,14 недель" показывать будет "8 недель".
Результат-то не тот, который нужен. Нужно, чтобы показывало "Прошло 8 недель и 1 день". Округление этого не даёт.
Я понимаю, что для Вас это звучит смешно и глупо, а для меня - дилемма. Чтобы её мне решить, я так понимаю, надо засесть за изучение языка программирования. Но это, так сказать, единичный случай, когда мне понадобилось прописать код, и ради этого сидеть и штудировать книги, думаю, нецелесообразно. Поэтому и обращаюсь за помощью к специалистам на форуме.

#14 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 22 Февраль 2016 - 15:45

Дело в том, что у нас априори подразумевается что человек, пишущий вычисления, уже владеет необходимыми навыками программирования (или по крайней мере готов их самостоятельно изучить), т.е. мы не занимаемся обучением основ программирования, максимум можем подсказать по какой-то редкой функции или сложному алгоритму. Я понимаю, что на это будет ответ вроде "а что тогда делать если я не программист, а очень хочется", но это вопрос скорее из сферы "философских". Если мы каждого будем азам программирования учить, то никакого времени не хватит. Одно дело - подсказать что-то, что имеет место только в КБ и не описано в документации, (т.е. просто не найти других источников), и совсем другое - по сути писать код за вас.

Алгоритм я вам уже подсказал - 1) делите, округляете, получаете число недель, 2) берете остаток от деления - получаете число оставшихся дней, 3) соединяете все в одну строку

Подсказки: http://php.net/manua....arithmetic.php , http://php.net/manua...tors.string.php

#15 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 22 Февраль 2016 - 16:26

Просмотр сообщенияCbCoder (22 Февраль 2016 - 15:45) писал:

Дело в том, что у нас априори подразумевается что человек, пишущий вычисления, уже владеет необходимыми навыками программирования (или по крайней мере готов их самостоятельно изучить), т.е. мы не занимаемся обучением основ программирования, максимум можем подсказать по какой-то редкой функции или сложному алгоритму. Я понимаю, что на это будет ответ вроде "а что тогда делать если я не программист, а очень хочется", но это вопрос скорее из сферы "философских". Если мы каждого будем азам программирования учить, то никакого времени не хватит. Одно дело - подсказать что-то, что имеет место только в КБ и не описано в документации, (т.е. просто не найти других источников), и совсем другое - по сути писать код за вас.

Алгоритм я вам уже подсказал - 1) делите, округляете, получаете число недель, 2) берете остаток от деления - получаете число оставшихся дней, 3) соединяете все в одну строку

Подсказки: http://php.net/manua....arithmetic.php , http://php.net/manua...tors.string.php

Спасибо, значит придётся изучать.
Просто, прежде чем спрашивать здесь, я попытался что-то сделать сам, нашёл похожие формулы, переписал их под себя, то есть постарался сделать всё своими силами. Но конечный результат оказался не совсем тем, что я хотел, а решения самостоятельно уже не нашел. поэтому и выложил здесь свои получившиеся коды, чтобы знающие люди сразу увидели, где я ошибся и подсказали, что поменять/добавить в кодах. Я же не прошу с нуля писать за меня код, а попросил помочь его доработать.
Вы пишете, что можете подсказать по сложному алгоритму. но "сложность" - она у каждого своя. то, что сложно для меня - для Вас "орешки", а что сложно для Вас - для меня вообще космос :)
Спасибо, что попытались помочь, оставлю как есть - пусть в отдельной колонке указывается количество недель с дробями, а в другой - общее количество дней. Остальное - буду высчитывать в уме или на калькуляторе ))

#16 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 22 Февраль 2016 - 16:36

Но ведь просто все:

$all_days = (strtotime($line['Текущая дата']) - strtotime($line['Дата начала производства'])) / 86400;
$weeks = round($all_days/7); // число недель
$days = $all_days % 7; // число дней как остаток
$line['Всего прошло'] = "Прошло $weeks недель и $days дней";

Мне не трудно один раз написать простой код, просто не хотелось чтобы это превращалось в систему.

#17 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 22 Февраль 2016 - 17:10

Просмотр сообщенияCbCoder (22 Февраль 2016 - 16:36) писал:

Но ведь просто все:

$all_days = (strtotime($line['Текущая дата']) - strtotime($line['Дата начала производства'])) / 86400;
$weeks = round($all_days/7); // число недель
$days = $all_days % 7; // число дней как остаток
$line['Всего прошло'] = "Прошло $weeks недель и $days дней";

Мне не трудно один раз написать простой код, просто не хотелось чтобы это превращалось в систему.

Спасибо огромное, Вы мне очень помогли!
Для Вас это просто, а для меня - тёмный лес. Не может же человек во всём разбираться. Ещё раз спасибо, надеюсь, таких как я незнаек очень мало ))

#18 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 22 Февраль 2016 - 17:24

Вот, выкладываю, что получилось в результате:
Всё работает, хоть и неправильно считает ))))

Прикрепленные изображения

  • Прикрепленное изображение: Конечный результат.png


#19 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 22 Февраль 2016 - 17:29

Да, действительно, здесь не округлять надо, а отсекать дробную часть. Разница в том, что 1,9 например округляется в 2, но нам нужен 1. Замените round на floor.

#20 novomaster

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 22 Февраль 2016 - 19:06

Просмотр сообщенияCbCoder (22 Февраль 2016 - 17:29) писал:

Да, действительно, здесь не округлять надо, а отсекать дробную часть. Разница в том, что 1,9 например округляется в 2, но нам нужен 1. Замените round на floor.

Ура! Супер! Всё получилось!
Дай Бог Вам здоровья! )))

Прикрепленные изображения

  • Прикрепленное изображение: Всё получилось.png






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных