Když jsem začal psát své stránky (podotýkám, že je opravdu píši - tj. nepoužívám žádný generátor stránek - od toho mne odradil pohled na "source" dokumentu několikrát opravovaného nějakým generátorem), rozhodl jsem se použít vlastnost JavaScriptu - last Modified. Zdálo se mi, že je to ideální prostředek, jak zjistit, kdy byla ta která stránka naposledy opravena.
Na štěstí jsen se rozhodl stránky ještě "verzovat" - což ovšem dělám ručně a sem-tam na to zapomenu.
Po několikaletém provozu svých web-stránek jsem však zjistil, že používání vlastnosti lastModified
je většinou spíš ke škodě než k užitku:
a) ftp programy a file-mamagery při uploadování mění datum
uploadovaného dokumentu,
b) některé web-servery nepodporují tuto vlastnost,
c) různé prohlížeče používají různé formáty data; v případě, že
web-server neposílá tuto hodnotu, často používají aktuálmí čas počítače
Proto jsem se rozhodl všechny své stránky postupně opravit tak, že datum poslední
modifikace budu vkládat ručně ve formátu:
- anglický název měsíce
- dvojmístné pořadové číslo dne v měsícist/nd/th
- čtyřmístné číslo roku
- hh:mm
- rozdíl od UTC ve tvaru (UTC+hh:mm)
- např.: March 11th, 2004 20:40:00 (UTC + 01:00)
Více k problematice lastModified viz
http://www.merlyn.demon.co.uk
, zvláště pak
http://www.merlyn.demon.co.uk/js-date3.htm
a
http://www.merlyn.demon.co.uk/last-mod.htm
Dále se problematikou GMT (Greenwich Mean Time) a UTC (atomic clock time) zabývají tyto stránky:
http://www.dxing.com/utcgmt.htm
,
http://wwp.greenwichmeantime.com/home.htm
a
http://www.worldtimezone.com
Přehledná tabulka používaných časů je např. na :
http://www.timeanddate.com/library/abbreviations/timezones/index.html
Abych si usnadnil práci a nezapomněl na vložení data poslední změny dokumentu, napsal jsem
jednoduchy batch-file, který vždy spustím po jakékoliv opravě.
Nelíbilo se mi generování pracovního scriptu, ale problémy s použitím (volatile) proměnných nastavených
pomocí wsh (vbs) scriptů (nemožnost použít takto nastavenou proměnnou v otevřeném okně příkazového řádku)
mě donutily se této zásady vzdát.
Jedná se o sekvenci příkazů cmd.exe a programu "reg.exe" ver.: 3.0, který je součástí instalace Windows XP.
Dále je použit cygwinový (freeware) program sed. Tento batch-file funguje bez problémů v systému
Windows XP Pro cz. V jiných systémech jsem jej nezkoušel. Pro jinou (nečeskou) lokalizaci by bylo
pravděpodobně nutno upravit nastavení proměnných použitých pro datum a čas.
@ ECHO OFF
SETLOCAL
ECHO.%*|FIND "?">nul
IF NOT ERRORLEVEL 1 SET ERR=0
FOR /F "TOKENS=2,3*" %%A IN ('ver') DO SET OS=%%A_%%B
IF NOT "%OS%"=="Windows_XP" IF NOT "%OS%"=="Windows_2000" SET ERR=1&&GOTO E00
sed.exe --help>nul 2>&1
IF ERRORLEVEL 1 SET ERR=2&&GOTO E00
IF "%1"=="" SET ERR=3&&GOTO E00
IF NOT EXIST %1 IF NOT EXIST ~%1 SET ERR=4&&GOTO E00
IF NOT EXIST ~%1 FINDSTR /C:"MY_DATUM" %1>nul
IF ERRORLEVEL 1 SET ERR=5&&GOTO E00
if EXIST ~%1 FINDSTR /C:"MY_DATUM" ~%1>nul
IF ERRORLEVEL 1 SET ERR=5&&GOTO E00
IF NOT EXIST ~%1 REN %1 ~%1&&ECHO.&&ECHO Soubor "%1" byl prejmenovan na "~%1"&&ECHO.
FOR /F "TOKENS=1,2,3,4 DELIMS=. " %%A IN ('DATE /T') DO ( SET DAY=%%B
SET MONTH=%%C
SET YEAR=%%D
)
FOR /F "TOKENS=1,2 DELIMS=:" %%A IN ('time /T') DO ( SET HOUR=%%A
SET MINUTE=%%B
)
FOR /F "TOKENS=1,2,3 SKIP=1" %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\ControlSET001\Control\TimeZoneInformation" /v ActiveTimeBias') DO SET BIAS=%%C
SET /A BIAS=%BIAS%
IF "%DAY:~0,1%"==" " SET DAY:~0,1=0
IF "%DAY:~1,1%"=="1" SET SFFX=st&&GOTO L01
IF "%DAY:~1,1%"=="2" SET SFFX=nd&&GOTO L01
IF "%DAY:~1,1%"=="3" SET SFFX=rd&&GOTO L01
SET SFFX=th
:L01
IF "%MONTH%"=="01" SET MONTH=January&&GOTO L02
IF "%MONTH%"=="02" SET MONTH=February&&GOTO L02
IF "%MONTH%"=="03" SET MONTH=March&&GOTO L02
IF "%MONTH%"=="04" SET MONTH=April&&GOTO L02
IF "%MONTH%"=="05" SET MONTH=May&&GOTO L02
IF "%MONTH%"=="06" SET MONTH=June&&GOTO L02
IF "%MONTH%"=="07" SET MONTH=July&&GOTO L02
IF "%MONTH%"=="08" SET MONTH=August&&GOTO L02
IF "%MONTH%"=="09" SET MONTH=September&&GOTO L02
IF "%MONTH%"=="10" SET MONTH=October&&GOTO L02
IF "%MONTH%"=="11" SET MONTH=November&&GOTO L02
IF "%MONTH%"=="12" SET MONTH=December&&GOTO L02
:L02
IF "%BIAS%"=="-60" SET TZ=UTC + 01:00&&GOTO L03
IF "%BIAS%"=="-120" SET TZ=UTC + 02:00&&GOTO L03
IF "%BIAS%"=="-180" SET TZ=UTC + 03:00&&GOTO L03
IF "%BIAS%"=="-240" SET TZ=UTC + 04:00&&GOTO L03
IF "%BIAS%"=="-300" SET TZ=UTC + 05:00&&GOTO L03
IF "%BIAS%"=="-360" SET TZ=UTC + 06:00&&GOTO L03
IF "%BIAS%"=="-420" SET TZ=UTC + 07:00&&GOTO L03
IF "%BIAS%"=="-480" SET TZ=UTC + 08:00&&GOTO L03
IF "%BIAS%"=="-560" SET TZ=UTC + 09:00&&GOTO L03
IF "%BIAS%"=="-600" SET TZ=UTC + 10:00&&GOTO L03
IF "%BIAS%"=="-660" SET TZ=UTC + 11:00&&GOTO L03
IF "%BIAS%"=="-720" SET TZ=UTC + 12:00&&GOTO L03
IF "%BIAS%"=="+60" SET TZ=UTC - 01:00&&GOTO L03
IF "%BIAS%"=="+120" SET TZ=UTC - 02:00&&GOTO L03
IF "%BIAS%"=="+180" SET TZ=UTC - 03:00&&GOTO L03
IF "%BIAS%"=="+240" SET TZ=UTC - 04:00&&GOTO L03
IF "%BIAS%"=="+300" SET TZ=UTC - 05:00&&GOTO L03
IF "%BIAS%"=="+360" SET TZ=UTC - 06:00&&GOTO L03
IF "%BIAS%"=="+420" SET TZ=UTC - 07:00&&GOTO L03
IF "%BIAS%"=="+480" SET TZ=UTC - 08:00&&GOTO L03
IF "%BIAS%"=="+560" SET TZ=UTC - 09:00&&GOTO L03
IF "%BIAS%"=="+600" SET TZ=UTC - 10:00&&GOTO L03
IF "%BIAS%"=="+660" SET TZ=UTC - 11:00&&GOTO L03
IF "%BIAS%"=="+720" SET TZ=UTC - 12:00&&GOTO L03
:L03
SET DATUM1=%MONTH% %DAY%
SET DATUM2= %YEAR%, %HOUR%:%MINUTE% (%TZ%)
sed.exe -e "s/MY_DATUM/%DATUM1%<SUP>%SFFX%<\/SUP> %DATUM2%/g" "~%1">%1
GOTO END
:E00
:: CLS
ECHO.
ECHO ========================================================================
ECHO Batchfile: DATHTML.bat
ECHO Version: 5.0
ECHO Written: 30.03.2004
ECHO Updated: -
ECHO Author: Jiri Libal sr.
ECHO ------------------------------------------------------------------------
ECHO Purpose: nastaveni hodnoty "Last-updated" v souborech "*.html"
ECHO OS: Windows XP PRO cz
ECHO Parameters: nazev souboru "file_name"
ECHO ------------------------------------------------------------------------
ECHO Programs used: sed.exe (http://www.cygwin.com)
ECHO Variables used: DATUM1
ECHO DATUM2
ECHO DAY
ECHO MONTH
ECHO YEAR
ECHO HOUR
ECHO MINUTE
ECHO BIAS
ECHO TZ
ECHO SFFX
ECHO Generated files: _filename (If not exists)
ECHO ------------------------------------------------------------------------
ECHO Example of using: DATHTML my.html
ECHO ------------------------------------------------------------------------
ECHO For timezones see for ex.:
ECHO http://www.timeanddate.com/library/abbreviations/timezones/
ECHO ========================================================================
GOTO E0%ERR%
:E01
ECHO.
ECHO ========================================================================
ECHO !!! Batch-file funguje jen v OS "Windows XP" !!!
ECHO ========================================================================
ECHO.
GOTO :END
:E02
ECHO.
ECHO ========================================================================
ECHO !!! Program "sed.exe" neni nainstalovan nebo k nemu neexistuje cesta!!!
ECHO ========================================================================
ECHO.
GOTO :END
:E03
ECHO.
ECHO ========================================================================
ECHO !!! Je nutno zadat parametr %%1 (jmeno souboru, napr: "my.html") !!!
ECHO ========================================================================
ECHO.
GOTO :END
:E04
ECHO.
ECHO ========================================================================
ECHO !!! Soubor "%1" ani "~%1" v aktualnim adresari neexistuje !!!
ECHO ========================================================================
ECHO.
GOTO :END
:E05
ECHO.
ECHO ========================================================================
ECHO !!! Soubor "%1" ("~%1") Neobsahuje hledany retezec (MY_DATUM) !!!
ECHO ========================================================================
ECHO.
GOTO :END
:END
ENDLOCAL
REM ========================================================================
Cygwinový program sed.exe je možno získat jako freeware přímo z oficiálních stránek cygwinu. Pro jehoho správnou funkci jej stačí nakopírovat spolu s knihovnou cygwin1.dll do jakéhokolov adresáře, který je uveden v proměnné %PATH%.
| Version: 3.5 | Last updated: April 20th 2004, 17:28 (UTC + 02:00) | Author: Jiří Líbal sr. |