JersyWoo > web business

Lost in the global village

Přeformátovaní řetězce datumu – Date to Timestamp and back to Date

Březen 19th, 2007

Občas je potřeba předem definovaný řetězec datumu přeformátovat na jiný datumový řetězec. Pokud máte timestamp (časová razítko) můžete ho předělat na datum pomocí date() dle potřeby. Pokud chcete z datumu udělat timestamp, slouží k tomu funkce mktime(). Konvertovat datum na jiný formát datumu je trochu složité a proto dole uvádím funkci, která by vám mohla ušetřit práci. Našel jsem ji v komentářích na php.net a trochu jsem ji doplnil a opatřil českými popiskami.

První parametr je jasný, vložíte string datumu. V druhém parametru zadáte vstupní formát datumu (v parametru 1) pomocí znakových zkratek uvedených u funkce date(), jiné tam bohužel nenacpete, leda že by jste funkci dále rozšířili (podělte se o kopii v komentářích). Do třetího parametru, který určuje výstupní formát už můžete nacpat znakové zkratky dle libosti.

 

< ?php // 1 parametr = vstupní řetězec // 2 parametr = formát vstupního řetězce // 3 parametr = formát výstupního řetězce function str2time($strStr, $strPattern = null, $newDate = null){    // pole časových znaků, viz: http://php.net/date#AEN21898    $arrCharacters = array(        'j', // den ,   1 číslice        'd', // den ,   2 číslice        'n', // měsíc,  1 číslice        'm', // měsíc,  2 číslice        'y', // rok,    2 číslice        'Y', // rok,    4 číslice        'G', // hodiny, 1 číslice        'H', // hodiny, 2 číslice        'i', // minuty        's'  // sekundy    );    // transformuje časové pole do stringu    $strCharacters = implode('', $arrCharacters);    // rozdělí do pole vstupní formát datumu    $arrDelimiters = preg_split('~['.$strCharacters.']~', $strPattern);    // pole vstupního formátu zpracuje do stringu    $strDelimiters = quotemeta(implode('', array_unique($arrDelimiters)));    // rozdělí do pole vstupní řetězec podle vstupního formátu data    $arrStr    = preg_split('~['.$strDelimiters.']~', $strStr);    // rozdělí do pole vstupní formát datumu    $arrPattern = preg_split('~['.$strDelimiters.']~', $strPattern);    // zkontroluje jestli jsou shodné vstupní datum a vstupní formát datumu    if (count($arrStr) !== count($arrPattern)) {        return false;    }    // do nového pole nacpe zadané hodnoty    $arrTime = array();    for ($i = 0;$i < count($arrStr);$i++) {        $arrTime[$arrPattern[$i]] = $arrStr[$i];    }    // dělá z dvoučíslicového datumu čtyřčíslový    if (isset($arrTime['y']) && !isset($arrTime['Y'])) {        $arrTime['Y'] = substr(date('Y'), 0, 2) . $arrTime['y'];    }    // dělá z měsíce v roce bez nuly dvojciferný s nulou    if (isset($arrTime['n']) && !isset($arrTime['m'])){       if(strlen($arrTime['n'])< 2 ){         $arrTime['m']='0'.$arrTime['n'];       }else{         $arrTime['m']=$arrTime['n'];       }    }    // dělá ze dne v měsíci bez nuly dvojciferný s nulou    if (isset($arrTime['j']) && !isset($arrTime['d'])){       if(strlen($arrTime['j'])< 2 ){         $arrTime['d']='0'.$arrTime['j'];       }else{         $arrTime['d']=$arrTime['j'];       }    }    // dělá z hodiny bez nuly hodinu s nulou    if (isset($arrTime['G']) && !isset($arrTime['H'])){       if(strlen($arrTime['G'])< 2 ){         $arrTime['H']='0'.$arrTime['G'];       }else{         $arrTime['H']=$arrTime['G'];       }    }    // když je deklarace prázdná naplní tam současný formát    foreach ($arrCharacters as $strCharacter) {        if (empty($arrTime[$strCharacter])) {            $arrTime[$strCharacter] = date($strCharacter);        }    }    // zkontroluje jestli datum je platný    if (!checkdate($arrTime['m'], $arrTime['d'], $arrTime['Y'])) {        return false;    }    // vytváří timestamp    $intTime = mktime($arrTime['H'], $arrTime['i'], $arrTime['s'], $arrTime['m'], $arrTime['d'], $arrTime['Y']);    $time=date($newDate, $intTime);    return $time; } // příklad $time = str2time('6-7-08 07:58:02', 'j-n-y H:i:s','Y-m-d H:i'); echo $time; ?>

Leave a Reply