Przejdź do treści

Aktualizacja

Data aktualizacji strony

Często zdarza się, że internauta wchodzący na jakąś stronę, chciałby wiedzieć, kiedy była ona ostatnio aktualizowana. Dzięki takiej informacji mógłby wywnioskować, czy serwis jest aktualizowany na bieżąco i czy nie znajdzie w nim informacji, które dawno utraciły ważność, co w niektórych przypadkach może być bardzo ważne.

Najprostszym sposobem określenia aktualności strony, jest podanie w widocznym miejscu (np. na samym początku) daty jej ostatniej modyfikacji. Można to zrobić oczywiście wpisując "ręcznie" datę, ale po którejś z kolei aktualizacji możesz zapomnieć o tej czynności, nie mówiąc już o tym, że jest to bardzo uciążliwe - szczególnie w przypadku większej ilości stron. Aby pozbyć się wszystkich tych problemów, wystarczy wstawić na każdą ze stron prościutki "skrypcik" (programik), który automatycznie wypisze datę ostatniej modyfikacji strony.

UWAGA! Skrypt tego typu nie zawsze działa! Informacja o dacie modyfikacji dokumentu pochodzi z nagłówka HTTP wysyłanego przez serwer WWW, na którym znajduje się strona. Ponieważ wysyłanie tych nagłówków nie jest obowiązkowe, często odczytanie prawidłowej daty aktualizacji nie jest możliwe. Informacja ta będzie odczytana na pewno, jeśli strona zostanie załadowana nie z Internetu, ale z lokalnego systemu plików.

Dlatego zawsze po umieszczeniu pliku na serwerze WWW sprawdzaj czy skrypt działa poprawnie! Alternatywą może być skrypt PHP, który będzie działał zawsze (musi być zapisany w pliku z rozszerzeniem *.php - np. index.php), jeżeli tylko serwer obsługuje tego typu skrypty:

<?php echo date('d.m.Y', filemtime($_SERVER['SCRIPT_FILENAME'])); ?>
albo
<?php echo date('Y-m-d H:i:s', filemtime($_SERVER['SCRIPT_FILENAME'])); ?>

Jeżeli natomiast Twój serwer nie obsługuje PHP albo tworzysz stronę w wersji offline, uruchamianą z dysku lokalnego lub np. z płyty CD-ROM albo odpowiedni nagłówek HTTP z datą modyfikacji jest wysyłany przez serwer, możesz posłużyć się skryptem JavaScript. W tym celu najpierw zapisz poniższy kod w dowolnym pliku z rozszerzeniem *.js - np. date.js:

/**
 * @author Sławomir Kokłowski {@link http://www.kurshtml.edu.pl}
 * @copyright NIE usuwaj tego komentarza! (Do NOT remove this comment!)
 */

Date.prototype.date = function(format)
{
	for (var i = 0, c = '', returner = '', formats = new Object(); i < format.length; i++)
	{
		c = format.charAt(i);
		if (c == '\\' && i + 1 < format.length) returner += format.charAt(++i);
		else if (typeof formats[c] != 'undefined') returner += formats[c];
		else
		{
			switch (c)
			{
				case 'a':
					formats[c] = this.getHours() < 12 ? 'przed południem' : 'po południu';
					break;
				case 'd':
					var day = this.getDate();
					formats[c] = (day < 10 ? '0' : '') + day;
					break;
				case 'D':
					var days = new Array('Nie', 'Pon', 'Wto', 'Śro', 'Czw', 'Pią', 'Sob');
					formats[c] = days[this.getDay()];
					break;
				case 'E':
					var month = new Array('stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca', 'sierpnia', 'września', 'października', 'listopada', 'grudnia');
					formats[c] = month[this.getMonth()];
					break;
				case 'F':
					var month = new Array('Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień');
					formats[c] = month[this.getMonth()];
					break;
				case 'g':
					formats[c] = (this.getHours() - 1) % 12 + 1;
					break;
				case 'G':
					formats[c] = this.getHours();
					break;
				case 'h':
					var hour = (this.getHours() - 1) % 12 + 1;
					formats[c] = (hour < 10 ? '0' : '') + hour;
					break;
				case 'H':
					var hour = this.getHours();
					formats[c] = (hour < 10 ? '0' : '') + hour;
					break;
				case 'i':
					var minute = this.getMinutes();
					formats[c] = (minute < 10 ? '0' : '') + minute;
					break;
				case 'j':
					formats[c] = this.getDate();
					break;
				case 'l':
					var days = new Array('Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota');
					formats[c] = days[this.getDay()];
					break;
				case 'L':
					formats[c] = this.getFullYear() % 400 && (this.getFullYear() % 4 || !(this.getFullYear() % 100)) ? 0 : 1;
					break;
				case 'm':
					var month = this.getMonth() + 1;
					formats[c] = (month < 10 ? '0' : '') + month;
					break;
				case 'M':
					var month = new Array('Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze', 'Lip', 'Sień', 'Wrz', 'Paź', 'Lis', 'Gru');
					formats[c] = month[this.getMonth()];
					break;
				case 'n':
					formats[c] = this.getMonth() + 1;
					break;
				case 'O':
					var O = -this.getTimezoneOffset() / 60;
					if (O < 0)
					{
						var sign = '-';
						O = -O;
					}
					else sign = '+';
					formats[c] = sign + (O < 10 ? '0' : '') + O + '00';
					break;
				case 'r':
					formats[c] = this.date('D, d M Y H:i:s O');
					break;
				case 's':
					var second = this.getSeconds();
					formats[c] = (second < 10 ? '0' : '') + second;
					break;
				case 'S':
					if (this.getDate().toString().search(/(^|[02-9])1$/) != -1) formats[c] = '-wszy';
					else if (this.getDate().toString().search(/(^|[02-9])2$/) != -1) formats[c] = '-gi';
					else if (this.getDate().toString().search(/(^|[02-9])3$/) != -1) formats[c] = '-ci';
					else if (this.getDate().toString().search(/(^|[02-9])[78]$/) != -1) formats[c] = '-my';
					else formats[c] = '-ty';
					break;
				case 't':
					var months = new Array(31, this.getFullYear() % 400 && (this.getFullYear() % 4 || !(this.getFullYear() % 100)) ? 28 : 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
					formats[c] = months[this.getMonth()];
					break;
				case 'U':
					formats[c] = Date.parse(this) / 1000;
					break;
				case 'w':
					formats[c] = this.getDay();
					break;
				case 'W':
					var day = this.getDay() - 1;
					if (day == -1) day = 6;
					formats[c] = Math.round((this.date('z') - day + 6) / 7);
					if (formats[c] == 0)
					{
						var date = new Date(this.getFullYear() - 1, 11, 31, 23, 59, 59);
						day = date.getDay() - 1;
						if (day == -1) day = 6;
						formats[c] = Math.round((date.date('z') - day + 6) / 7);
					}
					else
					{
						var date = new Date(this.getFullYear(), 11, 31, 23, 59, 59);
						day = date.getDay() - 1;
						if (day == -1) day = 6;
						if (day < 3 && this.date('z') >= date.date('z') - day) formats[c] = 1;
					}
					break;
				case 'Y':
					formats[c] = this.getFullYear();
					break;
				case 'y':
					formats[c] = this.getFullYear().toString().substring(2);
					break;
				case 'z':
					var months = new Array(31, this.getFullYear() % 400 && (this.getFullYear() % 4 || !(this.getFullYear() % 100)) ? 28 : 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
					formats[c] = this.getDate();
					for (var j = 0, month = this.getMonth(); j < month; j++) formats[c] += months[j];
					break;
				case 'Z':
					formats[c] = -this.getTimezoneOffset() * 60;
					break;
				default:
					formats[c] = c;
					break;
			}
			returner += formats[c];
		}
	}
	
	return returner;
}

Następnie w treści nagłówkowej dokumentu (wewnątrz <head>...</head>) wstaw jeden raz:

<script type="text/javascript" charset="iso-8859-2" src="date.js"></script>

W wyróżnionym miejscu oczywiście należy podać lokalizację utworzonego wcześniej pliku date.js. Teraz wystarczy wkleić na stronie w wybranym miejscu przykładowy kod:

<script type="text/javascript">
// <![CDATA[
document.write(new Date(document.lastModified).date('d.m.Y'));
// ]]>
</script>

Sposób wyświetlania daty można zmienić, podając w wyróżnionym miejscu inny szablon formatujący datę. Pojedyncze litery w tym tekście odpowiadają specjalnym kodom formatującym. Przykładowo: litera d zostanie zastąpiona dniem miesiąca, m - numerem miesiąca, natomiast Y - rokiem. W związku z tym wpisanie d.m.Y może poskutkować następującym wynikiem na ekranie:

Lista wszystkich możliwych do użycia kodów w szablonie formatującym datę jest następująca:

  • a - "przed południem" lub "po południu"
  • d - dzień miesiąca, 2 cyfry z zerem na początku; tzn. od "01" do "31"
  • D - dzień tygodnia, tekst, 3 litery; np. "Pią"
  • E - miesiąc, tekst, pełna nazwa w dopełniaczu; np. "stycznia"
  • F - miesiąc, tekst, pełna nazwa; np. "Styczeń"
  • g - godzina, format 12-godzinny bez zera na początku; tzn. od "1" do "12"
  • G - godzina, format 24-godzinny bez zera na początku; tzn. od "0" do "23"
  • h - godzina, format 12-godzinny z zerem na początku; tzn. od "01" do "12"
  • H - godzina, format 24-godzinny z zerem na początku; tzn. od "00" do "23"
  • i - minuty; tzn. od "00" do "59"
  • j - dzień miesiąca bez zera na początku; tzn. od "1" do "31"
  • l - (mała litera 'L') dzień tygodnia, tekst, pełna nazwa; np. "Piątek"
  • L - "1" jeśli rok przestępny, "0" w przeciwnym razie
  • m - miesiąc; tzn. "01" to "12"
  • M - miesiąc, tekst, 3 litery; np. "Sty"
  • n - miesiąc bez zera na początku; tzn. "1" to "12"
  • O - różnica w stosunku do czasu Greenwich; np. "+0200"
  • r - data sformatowana; np. "Czw, 21 Gru 2000 16:01:07 +0200"
  • s - sekundy; np. "00" to "59"
  • S - standardowy sufiks liczebnika porządkowego, tzn. "-wszy", "-gi", "-ci" , "-ty" lub "my"
  • t - liczba dni w danym miesiącu; tzn. od "28" do "31"
  • U - liczba sekund od uniksowej Epoki (1 stycznia 1970 00:00:00 GMT)
  • w - dzień tygodnia, liczbowy, tzn. od "0" (Niedziela) do "6" (Sobota)
  • W - numer tygodnia w roku według ISO-8601, przedział od 1 do 53, gdzie tydzień 1 jest pierwszym tygodniem, który ma co najmniej 4 dni w aktualnym roku, przy czym pierwszym dniem tygodnia jest poniedziałek
  • Y - rok, 4 cyfry; np. "1999"
  • y - rok, 2 cyfry; np. "99"
  • z - dzień roku; tzn. od "1" do "365" ("366")
  • Z - ofset strefy czasowej w sekundach (tzn. pomiędzy "-43200" a "43200"). Ofset dla stref czasowych na zachód od UTC (południka zero) jest zawsze ujemny a dla tych na wschód od UTC jest zawsze dodatni.

Aby normalnie wyświetlić na ekranie literę będącą kodem formatującym, należy ją poprzedzić podwójnym znakiem \\. Na przykład po wpisaniu: "\\d" zostanie wyświetlona po prostu litera "d", a nie dzień miesiąca. Ponadto jeśli w szablonie formatującym datę ma się wyświetlić znak \ trzeba go zamienić na cztery takie znaki: "\\\\".

Przykład:

<script type="text/javascript">
// <![CDATA[
document.write(new Date(document.lastModified).date('Y-m-d H:i:s'));
// ]]>
</script>


<script type="text/javascript">
// <![CDATA[
document.write(new Date(document.lastModified).date('l, j E Y, G:i'));
// ]]>
</script>


<script type="text/javascript">
// <![CDATA[
document.write(new Date(document.lastModified).date('jS E Y \\r., \\go\\d\\z. g:i a (\\d\\z\\ień \\roku: z, \\t\\y\\d\\z\\ień \\roku: W)'));
// ]]>
</script>

Aktualna data

Po niewielkiej modyfikacji można wyświetlić na ekranie bieżącą datę, a nie czas aktualizacji strony. Aby to zrobić wystarczy w drugiej części skryptu usunąć wyrażenie: document.lastModified.

Przykład:

<b>Dzisiaj jest:</b>
<script type="text/javascript">
// <![CDATA[
document.write(new Date().date('l, j E Y'));
// ]]>
</script>
Dzisiaj jest:

Komentarze

Zobacz więcej komentarzy