Сравняване на две дати

dunix

Registered
Здравейте,
Пробвам се да сравня две дати и да изкарам резултат ако едната дата е по-голяма от другата.
В базата данни записвам само датата, без час. Изглежда така 2016-11-17

PHP:
$date1 = $row['data'];
$date2 = date('Y-m-d', time());
if( $date2 >= $date1) { $addClass = "red"; }

Как мога да го направя за да се получи
 
Използвай timestamp, няма да се тревожиш за форматиране и т.н., просто 2 числа и проверяваш кое е по-голямо (подобно на този пример) и става доста лесно нали ? :D
PHP:
$data1 = strtotime($row['data']);
$sega = time();

if($data1>$sega) { echo 'oshte ne e minala taq data';}else{echo 'minala e';}
:idea: :?:
 
Защо не го направиш направо в заяквата?

[sql]select date_field_1 - date_field2 from table[/sql]
 
Мисля, че .. ако ссъдя по примера му.. няма да го направи така защото има само 1 поле с дата, а другото е динамична променлива.
PHP:
$date1 = $row['data'];
$date2 = date('Y-m-d', time());
Въпреки, че може да я хакне ая променлива и в заявката, но ако е в лооп или нещо такова малко не му върши работа.

Бтв, колега, мисля, че си пропуснал да дадеш име на колоната.
[sql]select *, date1-date2 as final_date from table[/sql]
:?:
 
Дори да сравнява съответната дата с днес, може да ползва NOW():

[sql]SELECT NOW() - date_field FROM table_name[/sql]

Хмм, sqlfiddle не зарежда, не мога да тествам там, в w3schools също не мога да подкарам sql date функциите, но би трябвало да работи и без да задаваш име на колоната c "as column_name"?
 
Не става така както каза joTunkiq.
А както каза anonimen не мисля че е добре тъй като няма смисъл да правя заявка в заявката. Аз съм направил една заявка за да извлекат датата и искам тази дата да се сравнява с настоящата. Ако е равна или след нея да ми показва текст.
 
dunix каза:
Не става така както каза joTunkiq.
А както каза anonimen не мисля че е добре тъй като няма смисъл да правя заявка в заявката. Аз съм направил една заявка за да извлекат датата и искам тази дата да се сравнява с настоящата. Ако е равна или след нея да ми показва текст.

Не правиш заявка в заявката а просто селектираш някаква информация. Може да показваш текста, ако използваш CASE ... WHEN ...

Пример:
Код:
SELECT pole1, pole2, CASE WHEN data1 - data2 >= NOW() THEN 'текста ти' ELSE 'друг текст или празен стринг или NULL whatevs' END as pole3 FROM table

Така ще си имаш информация от таблицата и няма да ти трябва да правиш допълнителни проверки с PHP прост директно изкарваш стойността на pole3.
 
Идеята ми не е да изведа дати които са преди тази дата. Искам да оцветя по различен начин резултатите когато е минала датата отразена в базата данни.

Примерно: ако имам в таблицата date 20.11.2016, а днес сме 22.11.2016 да ми оцвети полето данните в друг цвят. За това искам да го ползвам.
 
Добре нещо такова няма ли да стане ? Пробвай така, сложи си проверката в цикъла на тр-то както съм показал, би трябвало да работи .. ако не.. Дай да видим код ?
PHP:
<table>
 
	<tr <?php 
$data = strtotime($row['data']);
$sega = time();
if($data<$sega) { echo 'style="background:darkred;color:#fff;"';}
?>>
		<td>asdasdasd</td>
		<td>asdasdasd</td>
		<td>asdasdasd</td>
	</tr>

 
</table>
:idea:
 
joTunkiq каза:
Добре нещо такова няма ли да стане ? Пробвай така, сложи си проверката в цикъла на тр-то както съм показал, би трябвало да работи .. ако не.. Дай да видим код ?
PHP:
<table>
 
	<tr <?php 
$data = strtotime($row['data']);
$sega = time();
if($data<$sega) { echo 'style="background:darkred;color:#fff;"';}
?>>
		<td>asdasdasd</td>
		<td>asdasdasd</td>
		<td>asdasdasd</td>
	</tr>

 
</table>
:idea:

Не става и предполагам че причината е защото в базата данни date записва само дата без час.
 
Тогава просто добави ръчно 00:00:00 накрая към дата от БД..? ИЛИ използвай explode и въведи ръчно данни в mktime()

пример:
PHP:
$data =  $row['MYDATA'];
$d = explode('-', $data);

$data_timestamped = mktime(0,0,0, $d[2], $d[1], $d[0]);

if($data_timestamped < time()) { echo 'sadasdasd MINALA E' ;}
Не знам дали ще работи, тук го написах.

- http://php.net/manual/bg/function.mktime.php

Сега виждаш ли защото почти всички ползваш timestamp формат, просто сравняваш две числа и не се тревожиш за формат :) :idea: :?:
 

Back
Горе