• 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
+1 głos
357 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 (256,600 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 (256,600 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 634 wizyt
pytanie zadane 29 grudnia 2017 w PHP przez mi-20 Stary wyjadacz (13,250 p.)
0 głosów
0 odpowiedzi 1,092 wizyt
pytanie zadane 11 marca 2017 w PHP przez BjoTrek Nowicjusz (210 p.)
–1 głos
1 odpowiedź 2,822 wizyt
pytanie zadane 22 kwietnia 2016 w JavaScript przez BlvckFox Gaduła (4,240 p.)

93,434 zapytań

142,429 odpowiedzi

322,662 komentarzy

62,798 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

...