phpbar.de logo

Mailinglisten-Archive

[PHP] datums-konvertierung

[PHP] datums-konvertierung

Andreas Lange php_(at)_phpcenter.de
Thu, 8 Aug 2002 14:20:43 +0200


> On Thu, Aug 08, 2002 at 01:57:50PM +0200, Martin Spütz wrote:
>> preg_replace()

> das kanns ja irgendwie nicht sein!

> mit date hat man 1000 moeglichkeiten einen unix timestamp in ein
> normales datum mit einem format-string zu bringen, und es gibt keine
> funktion die das gegenteil macht????

> ich hab zB in einer datenbank gespeichert wie der user das datum ablegen
> muss. (zB : m.d.Y) jetzt wuerde ich geren, eben je nachdem was in der
> datenbank fuer ein format-string ist, dieses datum in einen unix
> timestamp umwandeln um zu ueberpruefen ob es valid ist, und wenn ja es
> gleich wieder umwandeln in das datenbank format (diesmal mit date)


> da muss es doch eine funktion geben... bitte... bitte.. bitte....

function un_date($pattern,$string)
{
	$mlist = array( 'januar' => 1,
	                'februar' => 2,
	                'märz'    => 3,
	                'märz' => 3,
	                'maerz' => 3,
	                'april' => 4,
	                'mai' => 5,
	                'juni' => 6,
	                'juli' => 7,
	                'august' => 8,
	                'september' => 9,
	                'oktober' => 10,
	                'november' => 11,
	                'dezember' => 12 );
	$day    = 0;
	$month  = 0;
	$year   = 0;
	$hour   = 0;
	$minute = 0;
	$second = 0;

	$c = strlen($pattern);
	for($i = 0; $i < $c; $i++) {
		$follow = substr($pattern,$i+1,1);
		if ($follow == "\\") {
			$follow = substr($pattern,$i+2,1);
		}

		switch (substr($pattern,$i,1)) {
			case 'd': $l = 2; break;
			case 'm': $l = 2; break;
			case 'y': $l = 2; break;
			case 'Y': $l = 4; break;
			case 'H': $l = 2; break;
			case 'i': $l = 2; break;
			case 's': $l = 2; break;
			case 'F':
				reset($mlist);
				foreach($mlist as $monthname => $monthnum) {
					if (strpos('#'.strtolower($string),$monthname) == 1) {
						$month = $monthnum;
						$l = strlen($monthname);
						break;
					}
				}
				break;
			case "\\": $l = 1; $i++; break;
			default:
				$l = strpos($string,$follow);
				$l = 1;
		}

		$work = substr($string,0,$l);
		$string = substr($string,$l);

		switch (substr($pattern,$i,1)) {
			case 'd': $day = $work; break;
			case 'm': $month = $work; break;
			case 'Y': $year = $work; break;
			case 'H': $hour = $work; break;
			case 'i': $minute = $work; break;
			case 's': $second = $work; break;
			case 'y':
				if ($work >= 70) {
					$year = 1900+$work;
				} else {
					$year = 2000+$work;
				}
				break;
		}
	}
	$timestamp = mktime($hour,$minute,$second,$month,$day,$year);
	return $timestamp;
}

Das Teil verhält sich ähnlich wie die Date Funktion ... nur eben umgekehrt
...

ich hab noch nicht alle Sachen in das teil implementiert, aber die
Std-Konvertierungen sollten damit gehen ...

Achja ... langsam isses auch ;-)

> [ -e n y o- ]

Gruss

Andreas Lange

--
Haas Media GmbH, Agentur für moderne Medien
Rehbockstraße 25, 30167 Hanover
Tel: (05 11) 270 38 70, Fax: (05 11) 270 38 69
http://www.haas-media.de


php::bar PHP Wiki   -   Listenarchive