Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Операции над временем в php 
V
    Опции темы
Biff
Дата 5.8.2010, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 12.6.2006

Репутация: нет
Всего: нет



Например в Excel если вычесть от 18:37 - 17:37 будет равно 1:00. Или 18:37 - 18:34 = 0:03 
А попытался вычесть время преобразовав его с помощь StrToTime(). 

$dateTime01 = $_POST[times]; 
$dateTime02 = $_POST[timevalue]; 
// 

$dateTime1 = StrToTime($dateTime01); 
$dateTime2 = StrToTime($dateTime02); 
// 
$dateTime4 = ($dateTime1 - $dateTime2); 
$_POST[time] = date("H:i",$dateTime4); 

Но на выходе $_POST[time] записывает не разницу во времени. 

Например если $_POST[times]; равно 16:41 
а $_POST[timevalue]; равно 16:46 

При вычитании 2-го из первого должно быть так 00:05 
но почему-то в базе данных записывается так 16:45
PM MAIL   Вверх
Muerto
Дата 5.8.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



Правильно будет конвертировать эти значения в timestamp, вычитать, и конвертировать обратно...

Это тебе не яблоки считать и вычитать 

Я встречал "программистов" которые что бы узнать если одно число позже другого или нет использовали - ... и если да то удаляли записи с базы, результат был плачевен

Это сообщение отредактировал(а) Muerto - 5.8.2010, 22:16


--------------------
user posted image
PM MAIL   Вверх
Biff
Дата 5.8.2010, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 12.6.2006

Репутация: нет
Всего: нет



Вот так что ли? можно пример?

$dateTime1 = timestamp($dateTime01);
 $dateTime2 = timestamp($dateTime02);

Добавлено @ 23:37
Цитата

Правильно будет конвертировать эти значения в timestamp, вычитать, и конвертировать обратно...


Я по вашему что делаю?

strtotime -лексическое преобразование строки времени в Unix timestamp.

Это сообщение отредактировал(а) Biff - 5.8.2010, 23:43
PM MAIL   Вверх
CruorVult
Дата 6.8.2010, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



Цитата(Biff @  5.8.2010,  21:18 Найти цитируемый пост)
Например в Excel если вычесть от 18:37 - 17:37 будет равно 1:00. Или 18:37 - 18:34 = 0:03 


Для таких операций лучше использовать объект DateTime:
Код

$datetime1 = new DateTime('16:41');
$datetime2 = new DateTime('16:46');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%H:%I');

PM MAIL Skype   Вверх
Biff
Дата 6.8.2010, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 12.6.2006

Репутация: нет
Всего: нет



Код

$interval = $datetime1->diff($datetime2);


А что такое diff?

Добавлено через 3 минуты и 17 секунд
Просто если протестировать ваш скрипт, то происходит такая ошибка:
Fatal error: Call to undefined method DateTime::diff() in /адрес test.php on line 11

PM MAIL   Вверх
CruorVult
Дата 6.8.2010, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



Цитата(Biff @  6.8.2010,  09:50 Найти цитируемый пост)
А что такое diff?

Разница(от слова different)
PM MAIL Skype   Вверх
CruorVult
Дата 6.8.2010, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



Цитата(Biff @  6.8.2010,  09:50 Найти цитируемый пост)
Fatal error: Call to undefined method DateTime::diff() in /адрес test.php on line 11

версия пхп какая?

с PHP 5.1.x должно работать

Это сообщение отредактировал(а) CruorVult - 6.8.2010, 10:11
PM MAIL Skype   Вверх
Biff
Дата 6.8.2010, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 12.6.2006

Репутация: нет
Всего: нет



PHP скорее всего 5.0, а может и последняя.
но я всё равно не могу понять, что за функция diff() - ни где нет описания.
Задачу решил вот таким методом может кому-то пригодится:

Код

$t1 = StrToTime($_POST[times]);
 $t2 = StrToTime($_POST[timevalue]);
 $t3 = $t1 - $t2;
 $_POST[time] = gmdate('H:i', $t3);

PM MAIL   Вверх
skyboy
Дата 6.8.2010, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Biff @  6.8.2010,  10:01 Найти цитируемый пост)
что за функция diff() - ни где нет описания.

это не "функция", а "метод объекта класса DateTime". и в документации на своем законном месте smile
PM MAIL   Вверх
Biff
Дата 6.8.2010, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 12.6.2006

Репутация: нет
Всего: нет



Цитата

это не "функция", а "метод объекта класса DateTime". и в документации на своем законном месте smile


Спасибо почитаю smile 

Это сообщение отредактировал(а) Biff - 6.8.2010, 11:28
PM MAIL   Вверх
Muerto
Дата 6.8.2010, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



Biff, Я сейчас подумал над вашим кодом и понял где у вас проблема...

Код

$dateTime01 = $_POST[times];  //Ок получили
$dateTime02 = $_POST[timevalue];  //Ок получили2
// 

$dateTime1 = StrToTime($dateTime01); //Ок вроде верно
$dateTime2 = StrToTime($dateTime02); //Ок вроде верно2
// 
$dateTime4 = ($dateTime1 - $dateTime2); //Может быть норм, если дальше будет что то другое
$_POST[time] = date("H:i",$dateTime4);  //Грубая ошибка 


Что же за грубая ошибка?

timestamp Это по сути дела сколько секунд прошло с 1970 года...

Если вы вчитайте допустим время сейчас и через 10 секунд, то по сути дела вы делайте 
 date("H:i",10);

А функция date требует значение timestamp

Вам нужно использовать СВОЮ функцию форматировки, которая возьмет количество секунд ваш $dateTime4
И напишет его в формате H:i
к примеру
10 = 0:00:10
61=0:01:01

Вот так это и должно работать.
А как привратить 60 секунд в 00:01 ?
нужно делить ... играйте с /60

Можете в гугле поискать convert second to time format

Это сообщение отредактировал(а) Muerto - 6.8.2010, 13:56


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.