Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: и снова даты - помогите с конвертацией дат
 
 автор: st.Ass   (31.10.2006 в 20:04)   письмо автору
 
 

В бд даты хранятся в формате date_1="Y-m-d H:i:s" (тип datetime).
Дату из формы получаем в формате $date_2= "d-m-Y"
необходимо выполнить sql-запрос вида


<?
$sql
="... WHERE date_1 > ".$date_2;
?>


Вернее необходимо его выполнить, так чтобы он корректно работал:)

Проблема заключается в том, чтобы привести даты к одному формату для того, чтобы их можно было сравнить....

   
 
 автор: st.Ass   (31.10.2006 в 20:13)   письмо автору
 
   для: st.Ass   (31.10.2006 в 20:04)
 

как понимаю это можно реализовать при помощи date()


<?
$date_1 
$HTTP_POST_VARS['date_1'];
$date_1 date(Y-m-d 00:00:00$date_1);
?>


только это не работает:(

   
 
 автор: st.Ass   (31.10.2006 в 21:07)   письмо автору
 
   для: st.Ass   (31.10.2006 в 20:13)
 


<?
$date_1 
date("Y-m-d \0\0\:\0\0\:\0\0"strtotime($HTTP_POST_VARS['date_1'])); 
....
?>


Так тоже не работает:(

   
 
 автор: kasmanaft   (31.10.2006 в 22:20)   письмо автору
 
   для: st.Ass   (31.10.2006 в 21:07)
 

Попробуйте так:

<? 
$date_1 
date("Y-m-d H:i:s"strtotime($HTTP_POST_VARS['date_1']));  
.... 
?>

( date_1 - дата из формы )

   
 
 автор: st.Ass   (31.10.2006 в 22:50)   письмо автору
 
   для: kasmanaft   (31.10.2006 в 22:20)
 

хм, вывожу при помощи echo - получаю то, что надо "Y-m-d 00:00:00"
В бд данные хранятся в виде Y-m-d H:i:s (тип - datetime)

Но при выполнении $sql = " ... WHERE date_create > ".$date_1;

получаю - You have an error in your SQL syntax

Может так нельзя сравнивать даты?

   
 
 автор: Trianon   (01.11.2006 в 00:00)   письмо автору
 
   для: st.Ass   (31.10.2006 в 22:50)
 

Можно. Только даты, как и строки, нужно брать в апострофы.

   
 
 автор: st.Ass   (01.11.2006 в 20:57)   письмо автору
 
   для: Trianon   (01.11.2006 в 00:00)
 

Хм, не получается

   
 
 автор: Trianon   (01.11.2006 в 21:12)   письмо автору
 
   для: st.Ass   (01.11.2006 в 20:57)
 


$date_1 = date("'Y-m-d H:i:s'", strtotime($HTTP_POST_VARS['date_1'])); 

   
 
 автор: st.Ass   (05.11.2006 в 11:54)   письмо автору
 
   для: Trianon   (01.11.2006 в 21:12)
 

Структура таблицы
pet | time_create

time_create - это datetime, формат по дефолту в бд - 0000-00-00 00:00:00

форма
 
<? echo "
<form action=report.php method=post>
<input name=date_1 size=12 value=\"\">"
;                   // если сюда вводим 10-10-2006 
echo"
<input type=submit name=report value='ПОЕХАЛИ'>
</form>"
;
?>

обработчик - report.php

<?
$date_1 
$HTTP_POST_VARS['date_1'];

echo 
$date_1;                                                          // Здесь верная дата - 10-10-2006
$date_1 strtotime("'Y-m-d H:i:s'"$date_1);

echo 
$date_1;                                                          // то здесь получаем "-1"
 
$query="SELECT * FROM main ";
if(isset(
$date_1))           $query.=" WHERE time_create  >".$date_1;  // а здесь соответственно получаем неправильное сравнение
 
$result mysql_query($query);
if (!
$result) echo die(mysql_error());

$a=mysql_num_rows($result);
?>
......

   
 
 автор: kasmanaft   (05.11.2006 в 12:28)   письмо автору
 
   для: st.Ass   (05.11.2006 в 11:54)
 


int strtotime ( string time [, int now] )

Первым параметром функции должна быть строка с датой на английском языке, которая будет
 преобразована в метку времени относительно метки времени, переданной в now, или 
текущего времени, если аргумент now опущен. В случае ошибки возвращается -1.


не $date_1 = strtotime("'Y-m-d H:i:s'", $date_1);
а $date_1 = date("'Y-m-d H:i:s'", strtotime($date_1));

   
 
 автор: st.Ass   (05.11.2006 в 12:48)   письмо автору
 
   для: kasmanaft   (05.11.2006 в 12:28)
 

Теперь год 2016...

<? 
$date_1 
$HTTP_POST_VARS['date_1']; 
echo 
$date_1;                                                          // Здесь верная дата - 10-10-2006 
$date_1 date("'Y-m-d H:i:s'"strtotime($date_1)); 
echo 
$date_1;                                                          // здесь получаем '2016-03-28 00:00:00'

$query="SELECT * FROM main "
if(isset(
$date_1))           $query.=" WHERE time_create  >".$date_1;  // а здесь соответственно получаем неправильное сравнение 
$result mysql_query($query); 
if (!
$result) echo die(mysql_error()); 
$a=mysql_num_rows($result); 
?>

   
 
 автор: st.Ass   (05.11.2006 в 15:59)   письмо автору
 
   для: st.Ass   (05.11.2006 в 12:48)
 


<?  
$date_1 
$HTTP_POST_VARS['date_1'];  
echo 
$date_1;                                                          // Здесь верная дата - 10-10-2006  
$date_1 strtotime($date_1);  
echo 
$date_1;                                                          // Здесь 1459108800
$date_1 date("'Y-m-d H:i:s'"strtotime($date_1));  
echo 
$date_1;                                                          // здесь получаем '2016-03-28 00:00:00' 

$query="SELECT * FROM main ";  
if(isset(
$date_1))           $query.=" WHERE time_create  >".$date_1;  // а здесь соответственно получаем неправильное сравнение  
$result mysql_query($query);  
if (!
$result) echo die(mysql_error());  
$a=mysql_num_rows($result);  
?> 

1459108800 :(
Объясните, пожалуйста, почему не работает данный код.

   
 
 автор: st.Ass   (12.11.2006 в 00:03)   письмо автору
 
   для: st.Ass   (05.11.2006 в 15:59)
 


<?
$date_1 
$HTTP_POST_VARS['date_1'];          // получаем данные из формы
echo $date_1;           // Здесь верная дата - 10-10-2006   
$date_1 strtotime($date_1);   
echo 
$date_1;           // Здесь $date_1  в unixstamp - 1459108800 

$query="SELECT * FROM main WHERE UNIX_TIMESTAMP(time_create) > FROM_UNIXTIME($date_1,'%Y-%m-%d %H:%i:%s')";              // здесь сравниваем в unixstamp time_create и $date_1 также в unixstamp 
$resultmysql_query($query)
$a=mysql_num_rows($result);
echo 
$a;                 // а здесь все равно получаем неправильное значение, причем всегда равному одному и тому же числу...
?>

Помогите разобраться - очень надо... Что я неправильно делаю?:(

   
 
 автор: Trianon   (12.11.2006 в 00:43)   письмо автору
 
   для: st.Ass   (12.11.2006 в 00:03)
 


<? 
$date_1 
$HTTP_POST_VARS['date_1'];          // получаем данные из формы 
echo $date_1;           // Здесь верная дата - 10-10-2006    
$date_1 strtotime($date_1);    
echo 
$date_1;           // Здесь $date_1  в unixstamp - 1459108800  

$query="SELECT * FROM main WHERE UNIX_TIMESTAMP(time_create) > $date_1"
             
// здесь сравниваем в unixstamp time_create и $date_1 также в unixstamp 
 
$resultmysql_query($query
$a=mysql_num_rows($result); 
echo 
$a;                 // а здесь все равно получаем неправильное значение, причем всегда равному одному и тому же числу... 
?> 

   
 
 автор: st.Ass   (12.11.2006 в 10:47)   письмо автору
 
   для: Trianon   (12.11.2006 в 00:43)
 

Вот, что странно:

<?
$date_1
="01-11-2006"

$date_1=strtotime($date_1);                          //  1177790400
echo $date_1;
$date_2=date("Y-m-d H:i:s",$date_1);          //  2007-04-29 00:00:00
echo $date_2;
?>

Как получается 2007-04-29?

   
 
 автор: kasmanaft   (12.11.2006 в 13:37)   письмо автору
 
   для: st.Ass   (12.11.2006 в 10:47)
 

Это у тебя php какой-то странный ... все работает как надо

   
 
 автор: st.Ass   (13.11.2006 в 21:01)   письмо автору
 
   для: kasmanaft   (12.11.2006 в 13:37)
 

Хех:) А вот и нет!!! Проблема в strtotime()

Такой код работает правильно

<?
$time
="2004-07-11 11:16:34";     
$time=strtotime($time); 
echo 
strftime("%d.%m.%Y %H:%M",$time);
?>


А такой нет

<?
$time
="11-07-2004 11:16:34";     
$time=strtotime($time); 
echo 
strftime("%Y.%m.%d %H:%M",$time);
?>


А у меня данные из формы передаются как раз как во втором примере...
Т.о. необходимо $time="11-07-2004 11:16:34" представить как $time="2004-07-11 11:16:34" .
Как это можно сделать?

   
 
 автор: st.Ass   (13.11.2006 в 21:24)   письмо автору
 
   для: st.Ass   (13.11.2006 в 21:01)
 

Решил проблему


<?
$time 
"17-10-2004";
$day  substr($time,0,2);
$monthsubstr($time,3,2);
$year substr($time,6,4);
$time$year.'-'.$month.'-'.$day;
echo 
$time;  // 2004-10-17
?>

   
 
 автор: Огонь   (24.11.2006 в 11:30)   письмо автору
 
   для: st.Ass   (13.11.2006 в 21:01)
 

если у мну не получается с 3его раза - перечитываю мануал :)

глянь тут:
http://ua2.php.net/manual/ru/function.strtotime.php,
http://www.gnu.org/software/tar/manual/html_node/tar_109.html

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования