Jump to content
php.lv forumi

date interval


eT`

Recommended Posts

Kā lai aprēķina divu datumu intervālu formātā - x dienas y stundas z minūtes

1. date("Y-m-d H:i:s");

2. dati no DB tādā pašā formātā

NANO hostings parāda ka datediff funkciju nedrīkst ( viņu PHP versija - 5.2.1.7, bet vajag laikam vismaz 5.3.0 )

 

$tagad = new DateTime(date("Y-m-d H:i:s"));
$beigsies = new DateTime($carr["end_date"]);
$interval = $tagad->diff($beigsies);
echo $interval->format('%dd %hst %imin');

 

man nesanāca arī, kad abus pārvērtu strtotime ( neattēlo pareizi )

$s = strtotime(date("Y-m-d H:i:s"));
$b = strtotime($carr["end_date"]);
$interval = $b-$s;
$laiks = date("j H i",$interval);

Edited by eT`
Link to comment
Share on other sites

Funkcija

<?
function difs($pirmais_laiks,$otrais_laiks){
$pirmais_laiks=strtotime($pirmais_laiks);
$otrais_laiks=strtotime($otrais_laiks);

$difs=$otrais_laiks-$pirmais_laiks;

return $difs;
}
?>

Kods:

<?
$date = date('Y-d-m h:i:s');
$time = "2011-6-7 23:54:00";
$time = difs($time,$date);

$links .= floor($time/60/60).":";
if (floor($time/60%60)<10){
 $links .= "0";
}
$links .= floor($time/60%60).":";
if (floor($time%60)<10){
 $links .= "0";
}
$links .= floor($time%60);
echo $links;
?>

Edited by zintis8789
Link to comment
Share on other sites

personīgi es šo sķērsli pārvarēju druscin savadāka es liku iekša datubāze sākuma datumu un beigu tad vilku arā no db un ar if palīdzību liku baudit vai sakuma datums nav vienāds ar beigu un ja jā tad veikt noteikto darbību ja ne viņs katru dienu liek iekša datubāze jaunu datumu līdz sakuma un beigu datums ir veināds un veic kaut kādu norādīto darbību !

ceru ka noder vai līdz ;)

Edited by Faks
Link to comment
Share on other sites

personīgi es šo sķērsli pārvarēju druscin savadāka es liku iekša datubāze sākuma datumu un beigu tad vilku arā no db un ar if palīdzību liku baudit vai sakuma datums nav vienāds ar beigu un ja jā tad veikt noteikto darbību ja ne viņs katru dienu liek iekša datubāze jaunu datumu līdz sakuma un beigu datums ir veināds un veic kaut kādu norādīto darbību !

ceru ka noder vai līdz ;)

man arī DB glabājas sākuma un beigu datums.

es izvelku šādi WHERE end_date>NOW()

 

Pārēķini uz "timestamp" abus. Atņem. Rezultātu pārrēķini atpakaļ.

 

P.S. DateTime::diff.

pamēģināšu ar timestamp.

datediff neiet, to jau #1 rakstīju

Edited by eT`
Link to comment
Share on other sites

Man slinkums lasīt, labāk rakstu...

 

function date_difference($date_1, $date_2, $only_seconds = false) {

$date_1 = is_int($date_1) ? $date_1 : strtotime($date_1);
$date_2 = is_int($date_2) ? $date_2 : strtotime($date_2);

if ($date_1 === $date_2) {

	$difference = 0;

} else if ($date_1 > $date_2) {

	$difference = $date_1 - $date_2;

} else { // $date_1 < $date_2

	$difference = $date_2 - $date_1;

}

if ($only_seconds === false) {

	$difference = array(
		'years'   => ceil($difference / (60 * 60 * 24 * 365)),
		'months'  => ceil($difference / (60 * 60 * 24 * 30)),
		'weeks'   => ceil($difference / (60 * 60 * 24 * 7)),
		'days'    => ceil($difference / (60 * 60 * 24)),
		'hours'   => ceil($difference / (60 * 60)),
		'minutes' => ceil($difference / 60),
		'seconds' => $difference
	);

}

return $difference;

}

var_dump(date_difference(1425374671, 1437294303)); // Basic example.
echo '<br />';
var_dump(date_difference(1437294303, 1425374671)); // Params just changed places!
echo '<br />';
var_dump(date_difference(1324343221, 1324343221)); // Equal dates.
echo '<br />';
var_dump(date_difference('2011-05-30 14:47:19', '2011-05-30 15:25:46')) ; // Time as string. This is format from database.
echo '<br />';
var_dump(date_difference('2012-01-06 12:02:53', 1532654762)); // Date #1 as string, date #2 as timestamp.
echo '<br />';
var_dump(date_difference(1532654762, '2012-01-06 12:02:53', true)); // Only seconds. Like short-hand.

 

Apakšā ir piemēri. Es, ja godīgi, aizmirsu vispār, ko tev vajadzēja. Uztaisīju šito... ir vēls un tā. Bet kaut ko jau atgriež!

Link to comment
Share on other sites

balstoties uz daGrevis funkciju uztaisīju funkciju, kas dara visu to ko man vajag.

šo ir diezgan viegli pielabot, ja vajag lielākus intervālus par dienām.

 

<?php
function date_diff($date_1, $date_2) 
		{
       		$date_1 = is_int($date_1) ? $date_1 : strtotime($date_1);
			$date_2 = is_int($date_2) ? $date_2 : strtotime($date_2);

			if($date_1 === $date_2) $interval = 0;
			else if ($date_1 > $date_2) $interval = $date_1 - $date_2;
			else $interval = $date_2 - $date_1;				

			$laika_sk = array(86400,3600,60);
			$apz = array('d','st','min');		

			for($i=0;$i<3;$i++)
			{
				$main = floor($interval/($laika_sk[$i]));
				if($main > 0)
				{
				$interval = $interval - ($main * $laika_sk[$i]);
				$laiks .= $main.$apz[$i].' ';
				}
			}
			return $laiks;

		}
?>

Link to comment
Share on other sites

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.

Loading...
×
×
  • Create New...