Datum substrahieren geht nicht mehr?

Alles, was PHP betrifft, kann hier besprochen werden.

Datum substrahieren geht nicht mehr?

Postby MisterX » 15. November 2005 11:45

Hallo

Ich hatte mal folgendes gemacht (glaube mit xampp 1.4.14):
$alter = date('Y-m-d')-$row[eingetragen_am]; // in MySQL als date, also auch im Format Y-m-d
Das hat mir die Differenz in Tagen ausgegeben.

Mit xampp 1.5.0sp1 kommt nur noch 0 als Ergebnis.
heute: 2005-11-15
eingetragen_am: 2005-06-26
alter: 0

Mit xampp 1.4.16 will ich es gleich noch auf einem anderen PC testen.

Kennt jemand ein workaround?

EDIT: Mhh ich dachte mit den alten Version ging das.
Habe bis xampp 1.4.10a und php 4.3.9 versucht, aber ging nicht.

Habe aber jetzt eine Lösung gefunden:
http://de2.php.net/date
Dort habe ich eine datediff Funktion gefunden, die ich etwas modifizieren musste:
function datediff($date1, $date2) {
// $date1 is subtracted from $date2.
// if $date2 is not specified, then current date is assumed.

//Splits date apart
list($date1_year, $date1_month, $date1_day) = split('[/.-]', $date1);

if (!$date2) {
$date2_year = date("Y"); //Gets Current Year
$date2_month = date("m"); //Gets Current Month
$date2_day = date("d"); //Gets Current Day
} else {
list($date2_year, $date2_month, $date2_day) = split('[/.-]', $date2);
}

$date1 = mktime(0,0,0,$date1_month, $date1_day, $date1_year); //Gets Unix timestamp for $date1
$date2 = mktime(0,0,0,$date2_month, $date2_day, $date2_year); //Gets Unix timestamp for $date2

$difference = $date2-$date1; //Calcuates Difference
return floor($difference/60/60/24); //Calculates Days Old
}

Der Aufruf:
$alter = datediff($row[eingetragen_am],date('Y-m-d'));
if ($alter <= 7) {echo "NEU";}

Ich hoffe Ihr könnt es auch gebrauchen!
MisterX
 
Posts: 49
Joined: 06. July 2004 18:16
Operating System: Win7 Ultimate x64 SP1 de/en

Postby jakimo72 » 15. November 2005 15:09

Auch ich habe eine Schwäche für komplizierten Code,
aber manchmal ist's doch zuviel...

Code: Select all

function datediff($date1, $date2 = '')
{
  $d1 = strtotime($date1);
  if(!empty($date2))
    $d2 = strtotime($date2);
  else
    $d2 = time();

  $diff = $d2 - $d1; //Calcuates Difference

  return floor($diff/24/60/60); //Calculates Days Old
}

User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby MisterX » 15. November 2005 15:26

Danke!

EDIT:
Habe noch was gefunden:

$heute = date('Y-m-d'); // verwende ich noch an einer anderen Stelle
$alter = floor((strtotime($heute) - strtotime($row[eingetragen_am])) / (60 * 60 * 24));

Ergibt positive Ergebnisse.
Also z.B. 7 Tage
MisterX
 
Posts: 49
Joined: 06. July 2004 18:16
Operating System: Win7 Ultimate x64 SP1 de/en


Return to PHP

Who is online

Users browsing this forum: No registered users and 4 guests