Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Въпрос за дата в PHP

Featured Replies

Здравейте,

 

Имам въпрос относно датите в PHP. Искам в сайта ми когато наближи определена дата (напр. 3 дни преди определената дата - текста да се оцветява в червено, а ако са 10 и повече дни - да е синьо). Имам ето този код, но нещата се получават само ако се пресмята само за конкретния месец - напр. май. Ако искам да ми сметне например някаква дата от юни спрямо днешната - не възприема. Искам да мога да задам и действително "по-голяма от", т.е. за напр. 10 и повече дни от днешната дата. В момента при този код ми вади $css_code="orange", а би било логично да ми изкара red, защото 4 юни е с повече от 2 дни по-голямо от днешна дата (25.5.2015). Ще съм много благодарен да ми помогнете, ето кода ми, при който променливата за CSS е примерна

<?php
                     
$en_color = "04.06.2015";
$today = date("d.m.Y");
$en_diff = $en_color - $today;

if ($en_diff==5) {
    $css_code = "blue";
} else {
    if ($en_diff>2) {
    $css_code = "red";
} else {
    $css_code = "orange";
}
}
echo $css_code;

?> 

.

Редактирано от smallman (преглед на промените)

<?php
                     
$en_color = strtotime("04.06.2015");
$today = time();
$en_diff = ceil(($en_color - $today) /86400);

if ($en_diff==5)
{
    $css_code = "blue";
}
else
{
    if ($en_diff>2)
	{
		$css_code = "red";
	}
	else
	{
		$css_code = "orange";
	}
}
echo $css_code;

?> 
  • Автор

Благодаря много! Сега гледам работи, но можеш ли да ми поясниш какво значат тези редове, за да знам

$en_color = strtotime("04.06.2015");
$today = time();
$en_diff = ceil(($en_color - $today) /86400);

Доколкото разбирам, стойността на $en_color е датата, от която искам да изчислявам

При $today  защо в скобите не е дефиниран формат, какво ще рече това празното?

$en_diff - това ceil какво показва?  А също и това /86400 ?

Ще ти дам бегла представа за повече подробности може да провериш методите в Интернет.

 

Първо защо твоят начин не работи. Еми не всеки програмен език може да извършва математически операции върху всички видове данни например.

Ако ти кажа от датата днеска извади 80 обаче не сам казал това 80 какво е няма как да знаеш и да извършиш операцията. Може да са 80 дена, 80 секунди, 80 седмици и така нататък.

В твоят случай е добре да се използва така наречения "Unix timestamp" което общо взето представя датата в едно голямо число посредством формула която лесно може да видиш в интернет.

Вече когато говорим за числа проблема с математическата част отпада, прехвърляме 2-те числа в "timestamp" намираме разликата и конвентираме до разбираеми за нас стойности.

В този случай (86400) прави тая магия което е просто (60 * 60 * 24 ) 60 минути 60 секунди 24 часа = 1 ден.

time() е метод който не взима параметри затова е празно в скобите. Метода връща моментното време на компютъра в timestamp.

Или с други думи вместо да се използват разни там структури или класове просто всичко се обръща такива който представляват число за да правим лесно математически изчисления. (Unix timestamp).

  • Автор

Благодаря ти много. В момента това, което искам, ми с получава. Ако имам други въпроси, ще пиша :)


Сега пък ми излиза друг проблем - според стойността, която въвеждам - red, orange или какъвто и да е цвят, като includ-на php файла в html страницата, стойността на съответната променлива се появява в хедъра на сайта, по-точно веднага след боди тага, където съм дал include (това е дори само при инклуд, не е необходимо дори да пиша php код някъде другаде в страницата), иначе си работи на мястото, където искам. Как да махна  този надпис?

Редактирано от smallman (преглед на промените)

  • Автор

Ами ето това горе примерно - искам автоматично да ми се сменя цвета на стойността на променливата - инклудвам си файлчето, пиша едно echo на страниците, където ми е необходимо и всеки път, когато ми е необходимо, само си сменям датата, и автоматично се обновява. Става въпрос за статичен сайт.

Редактирано от smallman (преглед на промените)

Ами ето това горе примерно - искам автоматично да ми се сменя цвета на стойността на променливата - инклудвам си файлчето, пиша едно echo на страниците, където ми е необходимо и всеки път, когато ми е необходимо, само си сменям датата, и автоматично се обновява. Става въпрос за статичен сайт.

 

Ти включваш (include) един PHP файл в друг PHP файл.

Не в HTML.

  • Автор

Един го включвам във втори (съдържащ горния код), а после втория го include в html страници на сайт, където после с по 1 ред си викам няколко променливи.

Редактирано от smallman (преглед на промените)

Един го включвам във втори (съдържащ горния код), а после ги include в html страници на сайт, където после с по 1 ред си викам няколко променливи.

 

OK.

С каква HTML команда включваш PHP файла в HTML страницата ?

  • Автор

OK.

С каква HTML команда включваш PHP файла в HTML страницата ?

<html>
  <head>
   <title>PHP into HTML</title>
  </head>
    <body>
      <?php
        include 'variables.php';
      ?>
     ...
   </body>
</html>
  




  

Редактирано от smallman (преглед на промените)

Представи си, че index.php го играе Front Controller...

 

index.php

<?php

function render($template, $data)
{
	ob_start();
	extract($data, EXTR_SKIP);
	include "templates/{$template}.php";
	echo ob_get_clean();
}

render('layout', [
	'title' => 'Test Page',
	'text' => 'Hello World!'
]);

А layout.php е темплейта на сайта ти...

 

layout.php

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title><?= $data['title']; ?></title>
	</head>
	<body>
		<?= $data['text']; ?>
	</body>
</html>

Сега кажи, кой е по-изчистеният вариант?

pix3l, не ми говори много горния код. Много начинаещ съм с PHP и не го крия.

Идеята е, да избягваш да смесваш PHP и HTML при всяка възможност. А за датата има специален клас, наречен DateTime, който има такъв метод (http://php.net/manual/en/datetime.diff.php).

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    26%
    Дарени 256.00 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.