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


Фото
- - - - -

Разница между двумя датами


  • Чтобы отвечать, сперва войдите на форум
7 ответов в теме

#1 shooroop

shooroop
  • Фрилансер
  • 1 080 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 09.04.2020 - 18:06

Не пойму где ошибка

 

 

{assign var="date1" value= $smarty.now+1*24*60*60}
{assign var="date2" value= $smarty.now+30*24*60*60}
{assign var="dateDiff" value=$date2 - $date1}

{$dateDiff|date_format:'%d'}
 

 

 

 

 

выводит 30  хотя должно 29 почему?


Изменено: shooroop, 09.04.2020 - 18:12


#2 chocolate_moles

chocolate_moles
  • Фрилансер
  • 503 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 09.04.2020 - 18:58

выводит 30  хотя должно 29 почему?

 

Потому что вы используете формат даты, где 86400 секунд разницы это не 1 день, а 02 день месяца



#3 shooroop

shooroop
  • Фрилансер
  • 1 080 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 10.04.2020 - 00:16

Потому что вы используете формат даты, где 86400 секунд разницы это не 1 день, а 02 день месяца

 

 

Честно не понимаю 86400 - это сутки как и 24*60*60.

 

Можешь указать на ошибку?



#4 chocolate_moles

chocolate_moles
  • Фрилансер
  • 503 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 10.04.2020 - 00:45

Честно не понимаю 86400 - это сутки как и 24*60*60.
 
Можешь указать на ошибку?

 
В вашем примере получилось 2505600 секунд, что равняется 29 дням, но вы конвертируете его в день даты, которая является 30 января 1970 года, отсюда и число 30.
 
Как вариант решения, результат нужно поделить на 24*60*60

{assign date1 $smarty.now +  1*24*60*60}
{assign date2 $smarty.now + 30*24*60*60}
{assign var = "dateDiff" value = ($date2-$date1)/24/60/60}

Изменено: chocolate_moles, 10.04.2020 - 00:50


#5 shooroop

shooroop
  • Фрилансер
  • 1 080 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 10.04.2020 - 01:48

 
В вашем примере получилось 2505600 секунд, что равняется 29 дням, но вы конвертируете его в день даты, которая является 30 января 1970 года, отсюда и число 30.
 
Как вариант решения, результат нужно поделить на 24*60*60

{assign date1 $smarty.now +  1*24*60*60}
{assign date2 $smarty.now + 30*24*60*60}
{assign var = "dateDiff" value = ($date2-$date1)/24/60/60}

 

а не вычесть  - 86400 ?  тогда будет 29



#6 chocolate_moles

chocolate_moles
  • Фрилансер
  • 503 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 10.04.2020 - 03:25

а не вычесть  - 86400 ?  тогда будет 29

 

В текущем примере можно и вычесть, а если вторая дата будет +34, то при вычитании у вас получится 2, а не ожидаемые 33.

 

Вам для чего все эти вычисления то?



#7 shooroop

shooroop
  • Фрилансер
  • 1 080 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 10.04.2020 - 15:36

В текущем примере можно и вычесть, а если вторая дата будет +34, то при вычитании у вас получится 2, а не ожидаемые 33.

 

Вам для чего все эти вычисления то?

 

 

Вывод отображения числа сколько времени осталось отображать товар на сайте. Максимальное количество дней жизни товара 30. 



#8 segment

segment
  • Пользователь
  • 6 сообщений
  • Заказчик

Опубликовано 11.04.2020 - 12:10

потому что дата начинается в 0:00:00:000

То есть день еще не прошел






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых