Date() + strtotime() + neuzmanība = kļūda

Bez maz vai iesācēja cienīga kļūda radās, rakstot kārtējo PHP skriptu. Taču neskatoties uz to, ka tā ir visai primitīva cēloņa kļūda, padalīšos ar to, kāda tieši, jo varbūt kādam pagadās tieši šāda kļūda un jātērē laiku, lai saprastu, kas tad īsti noticis.

Situācija bija šāda – ir datums formātā yyyy-mm-dd, piemēram, 1990-07-22. Lai to pārvērstu LV raksturīgā variantā parasti izmantoju date('d-m-Y', strtotime($datums)). Taču, šoreiz bija gadījumi, kad attiecīgā lieta nostrādaja kā parasti un brīžiem nenostrādāja. Kad sāku pētīt uz kuriem datumiem īsti nenostrādā, sapratu, ka tie ir datumi, kas vecāki par 1970-01-01. Lūk! It kā elementāra lieta, bet rakstot skriptu pat neiedomājos, ka būs šādi datumi. Līdz ar to nācās izdomāt kādu apkārtceļu šai lietai. Tā, kā citas standarta funkcijas neatradu, kas to varētu paveikt, tad uzrakstīju mazu funkciju, kura sakārto datumu konkrētajā formātā. Nav jau ideāli, bet vismaz strāda. Ja kādam ir labāki risinājumi šai problēmai – padalieties. Funkcija bija šāda:
function ConvertedDate($date)
{
if ($date)
{
$dz = explode('-', $date);
return $dz[2].'-'.$dz[1].'-'.$dz[0];
}
}

Tātad secinājums – ja maināt datuma formātu, atcerieties par strtotime() ierobežojumiem!

2 comments

  1. Mani vienmēr ir tracinājis dd-mm-yyyy formāts. To tak normāli nevar sakārtot.
    Vienmēr esmu izmantojos yyyy-mm-dd formātu.

    Kāpēc tev tur if ($date) ir? Un ko funkcija atgriezīs, kad if nosacījums neizpildīsies?

    Varbūt labāks kods (varbūt nē):
    return implode(‘-‘, array_reverse(explode(‘-‘, $date)));

  2. Nu jā – array_reverse arī nav slikti. Nebiju pat iedomājies :)

    $date vienmēr būs normāls datums – tāpēc nav jāuztraucas par to, kas būtu, ja datums būtu nepareizs vai tukšs. Konkrētajā situācijā viņš vienmēr ir un ir formātā yyyy-mm-dd.

    Protams, ka formāts dd-mm-yyyy nav diez ko patīkams, jo, piemēram, ar to pašu strtotime() normāli neparsēsies, bet ko nu darīt, ja reizēm tādu vajag :)

Atbildēt

Jūsu e-pasta adrese netiks publicēta.

This site uses Akismet to reduce spam. Learn how your comment data is processed.