• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Modyfikowanie daty w PHP

VPS Starter Arubacloud
+1 głos
293 wizyt
pytanie zadane 30 maja 2021 w PHP przez KFC Użytkownik (610 p.)
zamknięte 30 maja 2021 przez KFC

Witam, stworzyłem prostą stronkę która odlicza czas do danego wydarzenia. Najpierw pobieram ją inputem typu date i wysyłam do PHP do obróbki. Tam zamieniam np "-" na ",", dodaję potrzebne zera itp. Ale jest jeszcze jedna rzecz. W JS miesiące są numerowane od 0 do 11, a input wysyła je w wartościach od 1 do 12. Jak mogę to rozwiązać?

Formularz:

<!DOCTYPE HTML>
<html lang="pl">
<head>
	metatagi i inne
</head>
<body>
	<div class="container">
		<header>
			<h1>Odliczanie</h1>
		</header>
		<main>
			<article>
				<h2>Wybierz datę:</h2>
				<form method="post" action="submit.php">
					<input type="date" name="data"/>
					<input type="submit" id="button" value="Odliczaj"/><br /><br />
					<a href="index.php"><div id="button"><i class="icon-left-big"></i> Powrót</div></a>
				</form>
			</article>
		</main>
	</div>
</body>
</html>

Skrypt PHP:

<?php
	session_start();
	
	if(!isset($_POST['data']))
	{
		header('Location: innadata.php');
		exit();
	}
	
	$odebrana_data = $_POST['data'];						//np. 03 czerwiec 2021 wygląda tak: 2021-06-03
	$data_przetworzona = str_replace("-", ", ", $odebrana_data);	//2021, 06, 03
	$data_plus_zera = $data_przetworzona.", 0, 0, 0, 0";			//2021, 06, 03, 0, 0, 0, 0
	
	//header('Location: innadata_o.php')
?>

Skrypt JS:

<?php 
	session_start();
	$data = $_SESSION['data'];
?>
var data = "<?php echo $data;?>";

function dataWydarzenia(rok, miesiac, dzien, godzina, minuta, sekunda, milisekunda)
{
	var dataWydarzenia = new Date(rok, miesiac, dzien, godzina, minuta, sekunda, milisekunda);
	//alert(dataWydarzenia);
}
dataWydarzenia(data);

function aktualnyCzas()
{
	var czasTeraz = new Date();
}

function czasDoWydarzenia(rok, miesiac, dzien, godzina, minuta, sekunda, milisekunda)
{
	var aktualnyCzas = new Date();
	var dataWydarzenia = new Date(rok, miesiac, dzien, godzina, minuta, sekunda, milisekunda);
	var pozostalyCzas = dataWydarzenia.getTime() - aktualnyCzas.getTime();
	
	if (pozostalyCzas > 0)
	{						
		var s = pozostalyCzas / 1000;		// sekundy
		var m = s / 60;						// minuty
		var h = m / 60;						// godziny
		var d = h / 24;						// dni

		var sLeft = Math.floor(s  % 60);	// pozostało sekund		
		var mLeft = Math.floor(m % 60);		// pozostało minut
		var hLeft = Math.floor(h % 24);		// pozostało godzin
		var dLeft = Math.floor(d);			// pozostało dni
		
		if (hLeft < 10)
		  hLeft = "0" + hLeft;
		if (mLeft < 10)
		  mLeft = "0" + mLeft;
		if (sLeft < 10)
		  sLeft = "0" + sLeft;
		
		if (dLeft == 0)
		{
			if (hLeft == 0)
			{
				if (mLeft == 0)
				{
					return sLeft;
				}
				else
				{
					return mLeft + " : " + sLeft;
				}
			}
			else
			{
				return hLeft + " : " + mLeft + " : " + sLeft;
			}
		}
		else
		{
			return dLeft + " : " + hLeft + " : " + mLeft + " : " + sLeft;
		}
	}
	else
	{
		return "00";
	}
}
					
function pokaz()
{
	document.getElementById("czas").innerHTML = czasDoWydarzenia(data);
	setInterval('document.getElementById("czas").innerHTML = czasDoWydarzenia('+data+')', 1000);
}

 

komentarz zamknięcia: Problem rozwiązany.

1 odpowiedź

+1 głos
odpowiedź 30 maja 2021 przez VBService Ekspert (251,210 p.)
wybrane 30 maja 2021 przez KFC
 
Najlepsza

Proponuję nie robić z datą w php-ie takich kombinacji:

    $odebrana_data = $_POST['data'];                        //np. 03 czerwiec 2021 wygląda tak: 2021-06-03
    $data_przetworzona = str_replace("-", ", ", $odebrana_data);    //2021, 06, 03
    $data_plus_zera = $data_przetworzona.", 0, 0, 0, 0"; 

przekaż ją do zmiennej w js-ie

var countDownDate = new Date('<?php echo $_POST['data']; ?>').getTime();

oczywiście możesz ją wcześniej sprawdzić (nie ufamy danym z formularza) np: How to Validate Date String in PHP

<?php
   /*
     How TO - JavaScript Countdown Timer
     https://www.w3schools.com/howto/howto_js_countdown.asp
   */ 
   //session_start();
     
    if(!isset($_POST['data']))
    {
        header('Location: innadata.php');
        exit();
    } else {
        $checkDownDate = $_POST['data'];

        //np.: How to Validate Date String in PHP
        //. . .

        $countDownDate = $checkDownDate;
    }
?>
<p id="czas"></p>

<script>
var countDownDate = new Date("<?php echo $countDownDate; ?>").getTime();

var x = setInterval(function() {
  var now = new Date().getTime();
  var distance = countDownDate - now;

  var days = Math.floor(distance / (1000 * 60 * 60 * 24));
  var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  var seconds = Math.floor((distance % (1000 * 60)) / 1000);

  document.getElementById("czas").innerHTML = days + "d " + hours + "h "
  + minutes + "m " + seconds + "s ";

  if (distance < 0) {
    clearInterval(x);
    document.getElementById("czas").innerHTML = "EXPIRED";
  }
}, 1000);
</script>

oczywiście ten skrypt jest przykładowy - z formatowaniem wyglądu licznika zapewne poradzisz sobie sam. wink 

 

 

Polecam:

Flip Countdown

Flip is an advanced and beautiful flip counter plugin. Easy to use and highly flexible, you can set up a custom counter on your website in minutes. Display visitor counts, countdown to a special date or celebrate progress. Whatever you’re planning, the options are endless.

komentarz 30 maja 2021 przez KFC Użytkownik (610 p.)

A co daje ten skrypt?

var countDownDate = new Date('<?php echo $_POST['data'];?>').getTime();

bo nie umiem z tego skorzystać.

komentarz 30 maja 2021 przez VBService Ekspert (251,210 p.)

Dodałem do odpowiedzi przykładowy skrypt.  smiley

1
komentarz 30 maja 2021 przez KFC Użytkownik (610 p.)

@VBService, O już działa. Dziękuję bardzo za pomoc.smiley

Podobne pytania

0 głosów
2 odpowiedzi 412 wizyt
pytanie zadane 29 grudnia 2017 w PHP przez mi-20 Stary wyjadacz (13,190 p.)
0 głosów
0 odpowiedzi 1,018 wizyt
pytanie zadane 11 marca 2017 w PHP przez BjoTrek Nowicjusz (180 p.)
–1 głos
1 odpowiedź 2,680 wizyt
pytanie zadane 22 kwietnia 2016 w JavaScript przez BlvckFox Gaduła (4,240 p.)

92,452 zapytań

141,262 odpowiedzi

319,079 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...