Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Странный вывод...

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
armancho7777777 Супермодератор
Отправлено: 25 Декабря, 2011 - 17:24:00
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Всем привет!
Почему echo 08 и echo 09 выводит 0 ?
 
 Top
Самогонщик
Отправлено: 25 Декабря, 2011 - 17:25:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




Потому что в восьмеричных СС не бывает цифер 8 и 9.
 
 Top
Champion Супермодератор
Отправлено: 25 Декабря, 2011 - 17:27:18
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Потому что на 0 начинаются числа восьмеричной системы счисления. А там всего 8 цифр - 9 и 8 там нету. Можно вывести echo '09', тогда получится
(Добавление)
Самогонщик, обогнал. Точно - самогонщик.
 
 Top
armancho7777777 Супермодератор
Отправлено: 25 Декабря, 2011 - 17:30:54
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Champion пишет:
Можно вывести echo '09', тогда получится

Да ну это-то ясно)

А как преобразовать дату с ведущими нулями "09-09-2011" в такую "9-9-2011" ?
 
 Top
Самогонщик
Отправлено: 25 Декабря, 2011 - 17:34:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




Можно воспользоваться функциями преобразования дат: сначала в юникс-время, потом в строку.

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

Всё зависит от того какой вариант тебе больше подходит.
 
 Top
armancho7777777 Супермодератор
Отправлено: 25 Декабря, 2011 - 17:52:24
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Так нормально?

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $Date = "2010-08-09";
  4.  
  5. $data_elements = explode("-",$Date);
  6.  
  7. foreach($data_elements as $data_element){
  8.    $arrDate[] = ltrim($data_element, 0);
  9. }
  10.  
  11. $resultDate = implode("-", $arrDate);
  12.  
  13. echo $resultDate;
  14.  
  15.  


... или можно по короче?

(Отредактировано автором: 25 Декабря, 2011 - 17:53:23)

 
 Top
Champion Супермодератор
Отправлено: 25 Декабря, 2011 - 17:52:27
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




preg_replace('/(?<!\d)0/', '', $date)
(Добавление)
Еще
j День месяца без ведущего нуля
n Порядковый номер месяца без ведущего нуля
Это если дата функцией date генерируется
 
 Top
armancho7777777 Супермодератор
Отправлено: 25 Декабря, 2011 - 17:55:40
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Champion пишет:
preg_replace('/(?<!\d)0/', '', $date)
(Добавление)
Еще
j День месяца без ведущего нуля
n Порядковый номер месяца без ведущего нуля
Это если дата функцией date генерируется


Спасибо Champion Улыбка

P.S. ... надо регулярку учить Огорчение
(Добавление)
Champion пишет:
Еще
j День месяца без ведущего нуля
n Порядковый номер месяца без ведущего нуля
Это если дата функцией date генерируется

Это я знаю. Просто дата в БД записывается с ведущими нулями, а для mktime() нужно без.

Мне надо вычислить разницу двух дат в днях.
Сделал так:

PHP:
скопировать код в буфер обмена
  1.  
  2. $Date = "2011-09-09";
  3.  
  4. $Date = preg_replace('/(?<!\d)0/', '', $Date); // Удаляем ведущие нули
  5. $arrDate = explode("-", $Date);
  6.  
  7. $d = $arrDate[2];  // День
  8. $m = $arrDate[1];  // Месяц
  9. $y = $arrDate[0];  // Год
  10.  
  11. $a = mktime(0, 0, 0, $m, $d, $y); // Вычисляемая дата
  12. $b = mktime(0, 0, 0, date('n, j, Y')); // Текущая дата
  13. $c = 24*60*60; // Количество секунд в сутках
  14. $abc = ($a-$b)/$c; // Результат разницы в днях
  15.  
  16. if($abc < 0){
  17.   echo "Прошло ".($abc*(-1))." дней";  
  18. }else{
  19.   echo "Осталось ".$abc." дней";       
  20. }
  21.  

(Добавление)
Champion пишет:
preg_replace('/(?<!\d)0/', '', $date)

Прокомментирйте пожалуйста строку, если не сложно.

(Отредактировано автором: 25 Декабря, 2011 - 18:04:59)

 
 Top
Slesher
Отправлено: 25 Декабря, 2011 - 18:10:37
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Дек. 2011  


Помог: 0 раз(а)




armancho7777777 пишет:
Мне надо вычислить разницу двух дат в днях.


может поможет http://php.net/manual/en/function.date-diff.php
 
 Top
Самогонщик
Отправлено: 25 Декабря, 2011 - 18:15:48
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




Слишком сложно
http://docs.php.net/manual/en/fu...n.date-parse.php
http://docs.php.net/manual/en/fu...on.strtotime.php

Только нужно внимательно прочитать документации перед их использованием.
 
 Top
armancho7777777 Супермодератор
Отправлено: 25 Декабря, 2011 - 18:32:16
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Slesher пишет:
http://php.net/manual/en/function.date-diff.php

На хосте PHP 5.2

(Отредактировано автором: 25 Декабря, 2011 - 18:37:09)

 
 Top
Мелкий Супермодератор
Отправлено: 25 Декабря, 2011 - 18:50:14
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




armancho7777777, что вам вообще от дат надо? А то MySQL сам отлично умеет даты сравнивать.
Просто есть записи с датой и надо вывести, сколько прошло/через сколько наступит?
http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]unction_datediff


-----
PostgreSQL DBA
 
 Top
armancho7777777 Супермодератор
Отправлено: 25 Декабря, 2011 - 19:06:40
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Мне надо удалять не активированные учётные записи посредством CRON.
На пример, сегодня пользователь зарегистрировался, прошло 10 дней,
и если он так и не активировал аккаунт, то удаляем из БД.

Вот, написал функцию:

PHP:
скопировать код в буфер обмена
  1.  
  2. function difference_in_days($date1, $date2 = null){
  3.        
  4.       $date1 = preg_replace('/(?<!\d)0/', '', $date1); // Удаляем ведущие нули
  5.       $arrDate1 = explode("-", $date1);
  6.       $date1 = mktime(0, 0, 0, $arrDate1[1], $arrDate1[2], $arrDate1[0]);
  7.        
  8.       if($date2 === null){
  9.          $date2 = mktime(0, 0, 0, date('n, j, Y'));
  10.       }else{
  11.           $date2 = preg_replace('/(?<!\d)0/', '', $date2);  // Удаляем ведущие нули
  12.           $arrDate2 = explode("-", $date2);
  13.           $date2 = mktime(0, 0, 0, $arrDate2[1], $arrDate2[2], $arrDate2[0]);
  14.        }
  15.  
  16.        return  ($date1-$date2)/86400; // Результат разницы в днях
  17.  
  18. }
  19.  
  20. // Второй параметр по умолчанию равен текущей дате
  21. echo difference_in_days("2011-09-08", "2011-09-09"); // == -1
  22. echo difference_in_days("2010-12-26"); // == -365 (сегодня 2011-12-26)
  23. echo difference_in_days("2012-12-26"); // == 366
  24.  

(Отредактировано автором: 25 Декабря, 2011 - 19:10:52)

 
 Top
Мелкий Супермодератор
Отправлено: 25 Декабря, 2011 - 19:31:35
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




PHP:
скопировать код в буфер обмена
  1. 'delete from users where reg_date < "'.date('Y-m-d',time() - 10 * 24 * 3600).'" and is_confirmed = 0'

или
CODE (SQL):
скопировать код в буфер обмена
  1. DELETE FROM users WHERE reg_date < now() - interval 10 day AND is_confirmed = 0


-----
PostgreSQL DBA
 
 Top
armancho7777777 Супермодератор
Отправлено: 25 Декабря, 2011 - 19:56:55
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Спасибо Мелкий!
Подскажите пожалуйста, а так верно будет,
если надо удалить записи 10-ти дневной давности?

PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_query("DELETE FROM `users` WHERE `date_reg` < '".date('Y-m-d')."' - INTERVAL 10 DAY AND `is_confirmed`=0");
  3.  


Тип поля для даты date

(Отредактировано автором: 25 Декабря, 2011 - 20:03:38)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Кодировки и все смежное »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB