Jump to content
Dragos

[PHP] Afişarea timpului în format "cât timp a trecut"

Recommended Posts

  • Moderators
Posted (edited)

Recent am avut nevoie să afişez timpul trecut de la ultimele acţiuni pe o platformă, aşa că am scris funcţia următoare:
 

<?php
function return_time($timestamp)
{
	$mins = time() - $timestamp;
	if($mins == 0)
	{
		$mins = "adineauri";
	}elseif($mins == 1)
	{
		$mins = "acum o secunda"; 
	}elseif($mins < 20)
	{
		$mins = "acum $mins secunde";
	}elseif($mins < 60)
	{
		$mins = "acum $mins de secunde";
	}elseif($mins < 120)
	{
		$mins = "acum un minut";
	}elseif($mins < 1200)
	{
		$mins = floor($mins / 60);
		$mins = "acum $mins minute";	
	}elseif($mins < 3600){
		$mins = floor($mins / 60);
		$mins = "acum $mins de minute";
	}elseif($mins < 7200){
		$mins = "acum o ora";
	}elseif($mins < 72000){
		$mins = floor($mins / 3600);
		$mins = "acum $mins ore";
	}elseif($mins < 86400){
		$mins = floor($mins / 3600);
		$mins = "acum $mins de ore";
	}else{
		$mins = date("j.m.Y",$timestamp) . " la " . date("G:i:s",$timestamp);
	}
	return $mins;
}

 

Edited by Dragos
  • Active Members
Posted (edited)
On 9/1/2017 at 6:36 PM, Erase said:

De ce nu folosesti switch ? 

Cum folosesti switch in cazul asta? Si de ce ar folosi switch daca este acelasi lucru?

Edited by dancezar
Posted

@Erase  @dancezar  Ceva de genul asta: 

<?php
function return_time($timestamp){
    $mins = time() - $timestamp;
    
	switch (true) {
      case $mins == 0:
          $mins = "adineauri";
          break;

      case $mins == 1:
          $mins = "acum o secunda"; 
          break;

      case $mins < 20:
          $mins = "acum $mins secunde"; 
          break;
        
      default:
          $mins = "niciodata";
          break;
	}
	return $mins;
}
?>

 

  • Like 1
  • Active Members
Posted
55 minutes ago, Timelord said:

@Erase  @dancezar  Ceva de genul asta: 


<?php
function return_time($timestamp){
    $mins = time() - $timestamp;
    
	switch (true) {
      case $mins == 0:
          $mins = "adineauri";
          break;

      case $mins == 1:
          $mins = "acum o secunda"; 
          break;

      case $mins < 20:
          $mins = "acum $mins secunde"; 
          break;
        
      default:
          $mins = "niciodata";
          break;
	}
	return $mins;
}
?>

 

Genial, deci practic ai inlocuit elseif cu case si in final ai fi scris cu o linie mai mult decat cu elseif.

  • Upvote 3
  • Moderators
Posted (edited)

Nu este ok din punct de vedere algoritmic să foloseşti switch-ul aşa, scopul lui nu este să fie folosit pentru comparaţii matematice. C++ nu permite aşa ceva, Java nu permite aşa ceva, este doar o chestie specifică PHP-ului pentru a oferi mai multă libertate.

Edited by Dragos
Posted
Just now, Dragos said:

Nu este ok din punct de vedere algoritmic să foloseşti switch-ul aşa, scopul lui nu este să fie folosit pentru comparaţii. C++ nu permite aşa ceva, Java nu permite aşa ceva, este doar o chestie specifică PHP-ului pentru a oferi mai multă libertate.

Scuze de off-topic. Daca switch-ul nu poate fii folosit in comparari, in ce cazuri poate sa fie folosit? Sunt doar curios. Multumesc :-)

  • Moderators
Posted
Just now, adicode said:

Scuze de off-topic. Daca switch-ul nu poate fii folosit in comparari, in ce cazuri poate sa fie folosit? Sunt doar curios. Multumesc :-)

Am corectat. M-am referit la comparaţii de tipul a > b, a >=b, etc.

 

În general, din ce am văzut, sunt folosite două variante în case: dacă variabila este identică cu o valoare sau dacă variabila se află într-un interval (ex. "case 1 ... 100").

  • Upvote 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...