Před konkrétním řešením je vhodné uvědomit si základní: funkce přiřazuje datům, které jí dáš, nějaký výsledek, který z nich vypočítá (velmi zhruba řečeno).
Takže se podívejme na první Tvůj kód: dáváš funkci $datum, ale ona s ním dále nepracuje, nýbrž tvrdošíjně vrací StrFTime("%A") . Vždycky musí vracet totéž, vstupní hodnotu vůbec nebere v úvahu.
V druhém kódu s proměnnou $datum pracuješ, ale předpokládáš, že $datum je array (což může být) a má nějakou hodnotu pro "%W" (a tuto hodnotu postrkuješ funkci StrFTime), o čemž pochybuji.