{"id":13164,"date":"2026-09-26T18:25:00","date_gmt":"2026-09-26T16:25:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=13164"},"modified":"2026-10-26T13:32:46","modified_gmt":"2026-10-26T12:32:46","slug":"tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/","title":{"rendered":"Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie"},"content":{"rendered":"<p>Zdarzenie pomiarowe mo\u017ce wyst\u0119powa\u0107 jako sekundy Unix, milisekundy, mikrosekundy albo tekst z przesuni\u0119ciem wzgl\u0119dem UTC. Przesuni\u0119cie okre\u015bla r\u00f3\u017cnic\u0119 wzgl\u0119dem UTC: +02:00 oznacza dwie godziny do przodu. Gdy czas UTC wynosi 12:00, zegar z przesuni\u0119ciem +02:00 wskazuje 14:00. Raporty zapisuj\u0105 tak\u017ce dat\u0119 kalendarzow\u0105. Poprawne przeliczenie wymaga trzech informacji: jednostki, znaczenia pola i docelowej strefy czasowej.<\/p>\n<p>Czas przegl\u0105darki, uruchomienie kontenera, czas zdarzenia i czas odbioru nie oznaczaj\u0105 automatycznie tej samej chwili. Dopiero por\u00f3wnanie znacze\u0144 pozwala sensownie zestawi\u0107 liczby. Liczba cyfr stanowi wskaz\u00f3wk\u0119, a nie definicj\u0119 pola.<\/p>\n<figure class=\"lw-diagram\"><img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-13164-review-20261024.png\" width=\"1120\" height=\"580\" loading=\"lazy\" decoding=\"async\" alt=\"Znacznik czasu: jednostka, znaczenie, strefa\"><figcaption>Jawna jednostka okre\u015bla przeliczenie liczby. Regu\u0142y strefy wyznaczaj\u0105 granice dnia; znaczenie pola wymaga osobnej kontroli.<\/figcaption><\/figure>\n<h2>1. Rozr\u00f3\u017cnienie pi\u0119ciu cz\u0119stych zapis\u00f3w<\/h2>\n<p>Poni\u017csze przyk\u0142ady odnosz\u0105 si\u0119 do <code>2026-09-26T23:30:00Z<\/code>, czyli godziny 01:30 dnia 27 wrze\u015bnia 2026 w Berlinie. Tylko trzy pierwsze formaty licz\u0105 jednostki od epoki Unix: 1 stycznia 1970 o 00:00 UTC. Zapis ISO przedstawia pola kalendarza, a sama data nie wskazuje pojedynczej chwili.<\/p>\n<table><thead><tr><th>Zapis<\/th><th>Przyk\u0142ad<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td>Sekundy<\/td><td>1790465400<\/td><td>Sekundy Unix, na przyk\u0142ad Meta event_time<\/td><\/tr><tr><td>Milisekundy<\/td><td>1790465400000<\/td><td>Milisekundy Unix, na przyk\u0142ad Date.now()<\/td><\/tr><tr><td>Mikrosekundy<\/td><td>1790465400000000<\/td><td>Mikrosekundy Unix, na przyk\u0142ad GA4 event_timestamp<\/td><\/tr><tr><td>ISO 8601 \/ RFC 3339<\/td><td>2026-09-27T01:30:00+02:00<\/td><td>Pola kalendarza z jawnym przesuni\u0119ciem<\/td><\/tr><tr><td>Data kalendarzowa<\/td><td>20260927<\/td><td>Data w Berlinie w tym przyk\u0142adzie, nie chwila<\/td><\/tr><\/tbody><\/table>\n<p><code>Date.now()<\/code> zwraca milisekundy bie\u017c\u0105cego zegara systemowego. W standardowej instalacji GTM <code>gtm.start<\/code> oznacza inicjalizacj\u0119 kontenera, a nie ka\u017cde p\u00f3\u017aniejsze klikni\u0119cie. Poprawna jednostka mo\u017ce wi\u0119c wyst\u0119powa\u0107 razem z b\u0142\u0119dnym znaczeniem.<\/p>\n<p>Dla warto\u015bci z 2026 roku dziesi\u0119\u0107, 13 i 16 cyfr to typowe d\u0142ugo\u015bci sekund, milisekund i mikrosekund. Starsze lub ujemne znaczniki, inne epoki oraz zwyk\u0142e identyfikatory nie pasuj\u0105 do takiej regu\u0142y rozpoznawania. Osiem cyfr r\u00f3wnie\u017c nie potwierdza prawid\u0142owej daty: <code>20260230<\/code> nie jest dniem kalendarzowym.<\/p>\n<h2>2. Przeliczenie z jawn\u0105 jednostk\u0105<\/h2>\n<p>Funkcja przyjmuje liczby ca\u0142kowite lub ci\u0105gi cyfr dziesi\u0119tnych z opcjonalnym znakiem. Warto\u015b\u0107 i jednostka s\u0105 osobnymi argumentami. Liczby zmiennoprzecinkowe, warto\u015bci logiczne i tekst z cz\u0119\u015bci\u0105 u\u0142amkow\u0105 s\u0105 odrzucane, aby unikn\u0105\u0107 niezauwa\u017conego zaokr\u0105glenia. Nanosekundy s\u0105 dopuszczane wy\u0142\u0105cznie przy dok\u0142adnej konwersji na mikrosekundy.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"python\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Python<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-python\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> re\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">from<\/span> datetime <span class=\"cbb-keyword\">import<\/span> datetime, timedelta, timezone\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">EPOCH = <span class=\"cbb-function\">datetime<\/span>(<span class=\"cbb-number\">1970<\/span>, <span class=\"cbb-number\">1<\/span>, <span class=\"cbb-number\">1<\/span>, tzinfo=timezone.utc)\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">epoch_to_utc<\/span>(value, unit):\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">isinstance<\/span>(value, bool):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">TypeError<\/span>(<span class=\"cbb-string\">\"boolean is not a timestamp\"<\/span>)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">isinstance<\/span>(value, str):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> re.<span class=\"cbb-function\">fullmatch<\/span>(<span class=\"cbb-string\">r\"&#91;+-&#93;?&#91;0-9&#93;{1,20}\"<\/span>, value):\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">\"expected an integer string\"<\/span>)\n<\/span><span class=\"cbb-line\">        value = <span class=\"cbb-function\">int<\/span>(value)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">elif<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-function\">isinstance<\/span>(value, int):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">TypeError<\/span>(<span class=\"cbb-string\">\"expected an integer or integer string\"<\/span>)\n<\/span><span class=\"cbb-line\">    factors = {<span class=\"cbb-string\">\"s\"<\/span>: <span class=\"cbb-number\">1_000_000<\/span>, <span class=\"cbb-string\">\"ms\"<\/span>: <span class=\"cbb-number\">1_000<\/span>, <span class=\"cbb-string\">\"us\"<\/span>: <span class=\"cbb-number\">1<\/span>}\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> unit == <span class=\"cbb-string\">\"ns\"<\/span>:\n<\/span><span class=\"cbb-line\">        micros, remainder = <span class=\"cbb-function\">divmod<\/span>(value, <span class=\"cbb-number\">1_000<\/span>)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> remainder:\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">\"nanoseconds would lose precision\"<\/span>)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">elif<\/span> unit <span class=\"cbb-keyword\">in<\/span> factors:\n<\/span><span class=\"cbb-line\">        micros = value * factors&#91;unit&#93;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">else<\/span>:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">\"unit must be s, ms, us or ns\"<\/span>)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">try<\/span>:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> EPOCH + <span class=\"cbb-function\">timedelta<\/span>(microseconds=micros)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">except<\/span> OverflowError <span class=\"cbb-keyword\">as<\/span> exc:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">\"outside Python datetime range\"<\/span>) <span class=\"cbb-keyword\">from<\/span> exc\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">print<\/span>(<span class=\"cbb-function\">epoch_to_utc<\/span>(<span class=\"cbb-string\">\"1790465400000000\"<\/span>, <span class=\"cbb-string\">\"us\"<\/span>).<span class=\"cbb-function\">isoformat<\/span>())\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\"># 2026-09-26T23:30:00+00:00<\/span><\/span><\/code><\/pre><\/figure>\n<p>Wynik to <code>datetime<\/code> w UTC z rozdzielczo\u015bci\u0105 mikrosekund. Funkcja sprawdza typ, jednostk\u0119 i zakres Pythona, ale nie biznesowe terminy przesy\u0142ania. Zgodno\u015b\u0107 daty ze zdarzeniem wymaga dodatkowej oceny na podstawie \u017ar\u00f3d\u0142a. B\u0142\u0119dnie zadeklarowana jednostka nadal mo\u017ce da\u0107 technicznie poprawn\u0105, lecz merytorycznie b\u0142\u0119dn\u0105 dat\u0119.<\/p>\n<p>Przyk\u0142adowo <code>1790465400<\/code> odczytane jako milisekundy daje <code>1970-01-21T17:21:05.400Z<\/code>. Odczyt milisekund jako sekund mo\u017ce utworzy\u0107 bardzo odleg\u0142\u0105 dat\u0119 albo b\u0142\u0105d zakresu. Nawet oczywi\u015bcie b\u0142\u0119dna data nie jest nieszkodliwa, gdy interfejs lub raport przetwarza warto\u015b\u0107 dalej.<\/p>\n<h2>3. Oddzielenie daty raportowej GA4 od znacznika czasu<\/h2>\n<p>Aktualny schemat eksportu GA4 opisuje <code>event_timestamp<\/code> jako czas odbioru przez Google Analytics w mikrosekundach UTC. Kilka zdarze\u0144 z tego samego \u017c\u0105dania mo\u017ce mie\u0107 jednakowy znacznik. Warto\u015b\u0107 nie jest wi\u0119c unikalnym kluczem zdarzenia ani, bez dodatkowej kontroli, dok\u0142adnym czasem klikni\u0119cia.<\/p>\n<p><code>event_date<\/code> to zarejestrowana data w formacie <code>YYYYMMDD<\/code> wed\u0142ug skonfigurowanej strefy raportowania. Tabele dzienne maj\u0105 nazwy <code>events_YYYYMMDD<\/code>. Lokalnej daty obliczonej ze znacznika odbioru nie nale\u017cy automatycznie uto\u017csamia\u0107 z zapisan\u0105 dat\u0105 zdarzenia: op\u00f3\u017anienia, znaczenie czasu i zmiany strefy raportowania wymagaj\u0105 osobnego uwzgl\u0119dnienia.<\/p>\n<p>Dla samego por\u00f3wnania stref tego samego przyk\u0142adowego momentu:<\/p>\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"plain\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Text<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-plain\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">UTC                2026-09-26T23:30:00Z\n<\/span><span class=\"cbb-line\">Europe\/Berlin      2026-09-27T01:30:00+02:00\n<\/span><span class=\"cbb-line\">Data UTC           2026-09-26\n<\/span><span class=\"cbb-line\">Data w Berlinie    2026-09-27<\/span><\/code><\/pre><\/figure>\n<p>We wrze\u015bniu Berlin wyprzedza UTC o dwie godziny, a zim\u0105 zwykle o godzin\u0119. Raport wed\u0142ug dnia lokalnego i raport wed\u0142ug UTC wybieraj\u0105 zatem r\u00f3\u017cne przedzia\u0142y. R\u00f3\u017cnica sum dziennych nie jest sta\u0142a: zdarzenia przesuwaj\u0105 si\u0119 przy obu granicach, a liczby zale\u017c\u0105 od rzeczywistej aktywno\u015bci.<\/p>\n<p>Por\u00f3wnania wymagaj\u0105 zgodnych definicji dnia, znacze\u0144 zdarze\u0144, filtr\u00f3w i aktualno\u015bci danych. Filtr tabel wybiera tabele eksportu; dodatkowy filtr znacznika wybiera chwile wewn\u0105trz tych tabel. Odtworzenie innego dnia raportowego wymaga tak\u017ce uwzgl\u0119dnienia tabel przy granicach oraz sp\u00f3\u017anionych danych. <code>LIMIT<\/code> ogranicza jedynie wynik i nie zapewnia ograniczenia liczby odczytanych bajt\u00f3w.<\/p>\n<h2>4. Funkcje BigQuery zgodne z jednostk\u0105<\/h2>\n<p><code>TIMESTAMP_SECONDS<\/code>, <code>TIMESTAMP_MILLIS<\/code> i <code>TIMESTAMP_MICROS<\/code> wymagaj\u0105 jednostki wskazanej w nazwie. Przyk\u0142ad wybiera kilka p\u00f3l z jednej jawnie nazwanej tabeli dziennej. Projekt, zbi\u00f3r danych, data i strefa raportowania wymagaj\u0105 dopasowania.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"sql\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">SQL<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-sql\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">SELECT<\/span>\n<\/span><span class=\"cbb-line\">  event_date,\n<\/span><span class=\"cbb-line\">  event_timestamp,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">TIMESTAMP_MICROS<\/span>(event_timestamp) <span class=\"cbb-keyword\">AS<\/span> timestamp_utc,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-type\">DATETIME<\/span>(<span class=\"cbb-function\">TIMESTAMP_MICROS<\/span>(event_timestamp),\n<\/span><span class=\"cbb-line\">           <span class=\"cbb-string\">'Europe\/Berlin'<\/span>) <span class=\"cbb-keyword\">AS<\/span> wall_clock_berlin,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-type\">DATE<\/span>(<span class=\"cbb-function\">TIMESTAMP_MICROS<\/span>(event_timestamp)) <span class=\"cbb-keyword\">AS<\/span> date_utc,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-type\">DATE<\/span>(<span class=\"cbb-function\">TIMESTAMP_MICROS<\/span>(event_timestamp),\n<\/span><span class=\"cbb-line\">       <span class=\"cbb-string\">'Europe\/Berlin'<\/span>) <span class=\"cbb-keyword\">AS<\/span> timestamp_date_berlin,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">FORMAT_TIMESTAMP<\/span>(<span class=\"cbb-string\">'%Y-%m-%dT%H:%M:%E6S%Ez'<\/span>,\n<\/span><span class=\"cbb-line\">                   <span class=\"cbb-function\">TIMESTAMP_MICROS<\/span>(event_timestamp),\n<\/span><span class=\"cbb-line\">                   <span class=\"cbb-string\">'Europe\/Berlin'<\/span>) <span class=\"cbb-keyword\">AS<\/span> text_with_offset,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">UNIX_SECONDS<\/span>(<span class=\"cbb-function\">TIMESTAMP_MICROS<\/span>(event_timestamp)) <span class=\"cbb-keyword\">AS<\/span> whole_seconds\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">FROM<\/span> <span class=\"cbb-variable\">`project_id.analytics_123456789.events_20260927`<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">LIMIT<\/span> <span class=\"cbb-number\">10<\/span>;<\/span><\/code><\/pre><\/figure>\n<p><code>TIMESTAMP<\/code> oznacza konkretn\u0105 chwil\u0119. <code>DATETIME<\/code> przechowuje dat\u0119 kalendarzow\u0105 i wskazanie zegara bez strefy. Lokalny zapis jest przydatny, lecz jednoznaczne przeliczenie wstecz wymaga dodatkowych informacji. <code>%E6S<\/code> zachowuje sze\u015b\u0107 cyfr cz\u0119\u015bci u\u0142amkowej w tek\u015bcie; <code>UNIX_SECONDS<\/code> zaokr\u0105gla w d\u00f3\u0142 do pocz\u0105tku sekundy i odrzuca mikrosekundy.<\/p>\n<p>Odczyt tekstu z jawnym przesuni\u0119ciem, jawn\u0105 stref\u0105 lub domy\u015blnym UTC daje r\u00f3\u017cne wyniki:<\/p>\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"sql\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">SQL<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-sql\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">SELECT<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">PARSE_TIMESTAMP<\/span>(<span class=\"cbb-string\">'%FT%T%Ez'<\/span>, <span class=\"cbb-string\">'2026-09-27T01:30:00+02:00'<\/span>) <span class=\"cbb-keyword\">AS<\/span> explicit_offset,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">PARSE_TIMESTAMP<\/span>(<span class=\"cbb-string\">'%FT%T'<\/span>, <span class=\"cbb-string\">'2026-09-27T01:30:00'<\/span>,\n<\/span><span class=\"cbb-line\">                  <span class=\"cbb-string\">'Europe\/Berlin'<\/span>) <span class=\"cbb-keyword\">AS<\/span> explicit_zone,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-function\">PARSE_TIMESTAMP<\/span>(<span class=\"cbb-string\">'%FT%T'<\/span>, <span class=\"cbb-string\">'2026-09-27T01:30:00'<\/span>) <span class=\"cbb-keyword\">AS<\/span> utc_default;<\/span><\/code><\/pre><\/figure>\n<p>Dwa pierwsze wyniki wskazuj\u0105 <code>2026-09-26T23:30:00Z<\/code>, trzeci natomiast <code>2026-09-27T01:30:00Z<\/code>, czyli dwie godziny p\u00f3\u017aniej. Sam wzorzec formatu nie ustala poprawnej strefy czasowej. Inne obs\u0142ugiwane funkcje parsowania r\u00f3wnie\u017c potrzebuj\u0105 jasnych zasad dotycz\u0105cych jednostki, formatu i strefy czasowej danych wej\u015bciowych.<\/p>\n<h2>5. Zmiana czasu tworzy powt\u00f3rzone i nieistniej\u0105ce godziny<\/h2>\n<p>W <code>Europe\/Berlin<\/code> godzina 02:30 wyst\u0119puje 25 pa\u017adziernika 2026 dwa razy: z <code>+02:00<\/code> oznacza 00:30 UTC, a z <code>+01:00<\/code> oznacza 01:30 UTC. Sama nazwa strefy nie rozstrzyga wieloznaczno\u015bci. Potrzebne jest znane przesuni\u0119cie lub jawny wyb\u00f3r pierwszego albo drugiego wyst\u0105pienia.<\/p>\n<p>Z kolei 29 marca 2026 godzina 02:30 w Berlinie nie istnieje, poniewa\u017c zegar przeskakuje z 02:00 na 03:00. Parser mo\u017ce przesun\u0105\u0107, odrzuci\u0107 albo inaczej rozstrzygn\u0105\u0107 tak\u0105 warto\u015b\u0107 zgodnie z przyj\u0119t\u0105 regu\u0142\u0105. Ciche ustawienie domy\u015blne nie odtwarza rzeczywistego zdarzenia.<\/p>\n<p>Te dni kalendarzowe trwaj\u0105 odpowiednio 25 i 23 godziny. Granice dnia wynikaj\u0105 wi\u0119c z lokalnej p\u00f3\u0142nocy i nast\u0119pnej lokalnej p\u00f3\u0142nocy, przeliczonych osobno na UTC. Dodanie 86 400 sekund nie jest og\u00f3lnym zamiennikiem.<\/p>\n<p>Dla zdarze\u0144 ju\u017c zako\u0144czonych przydatny jest zapis jednoznacznie ustalonej chwili UTC. Pierwotna strefa i tekst \u017ar\u00f3d\u0142owy mog\u0105 pozosta\u0107 jako dodatkowy \u015blad. Zapis UTC nie naprawia jednak wcze\u015bniejszej b\u0142\u0119dnej interpretacji czasu lokalnego.<\/p>\n<h2>6. Zasady interfejsu odbieraj\u0105cego dane<\/h2>\n<p>Meta CAPI u\u017cywa dla <code>event_time<\/code> sekund Unix rzeczywistego zdarzenia. Niezmieniona warto\u015b\u0107 <code>Date.now()<\/code> nie jest wi\u0119c odpowiednia. Dopuszczalny wiek zdarzenia i obs\u0142uga b\u0142\u0119d\u00f3w zale\u017c\u0105 od konkretnego interfejsu oraz \u017ar\u00f3d\u0142a zdarzenia; poprawna odpowied\u017a HTTP nie dowodzi pe\u0142nego przetworzenia ani atrybucji. Osobnej analizy wymagaj\u0105 obiekty b\u0142\u0119d\u00f3w, szczeg\u00f3\u0142y odpowiedzi i diagnostyka.<\/p>\n<p>Google Ads API wymaga strefy czasowej w <code>ClickConversion.conversion_date_time<\/code>, w formacie <code>yyyy-mm-dd hh:mm:ss+|-hh:mm<\/code>. Pasuj\u0105cy przyk\u0142ad to <code>2026-09-27 01:30:00+02:00<\/code>. Braku przesuni\u0119cia nie nale\u017cy og\u00f3lnie traktowa\u0107 jako automatycznego u\u017cycia strefy konta. Inne drogi przesy\u0142ania maj\u0105 oddzielne wymagania.<\/p>\n<p>Przy ponowieniu nadal obowi\u0105zuje rzeczywisty czas zdarzenia. Zast\u0105pienie starego czasu warto\u015bci\u0105 \u201eteraz\u201d w celu obej\u015bcia terminu fa\u0142szuje dane. Po potwierdzonej korekcie zegara pierwotny czas, dopuszczalne okno i ochrona przed duplikatami wymagaj\u0105 wsp\u00f3lnej kontroli.<\/p>\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n<h3>Czy 16-cyfrowe mikrosekundy s\u0105 zawsze dok\u0142adne w JavaScripcie?<\/h3>\n<p>Nie. <code>Number.MAX_SAFE_INTEGER<\/code> wynosi <code>9007199254740991<\/code>. Przyk\u0142ad z 2026 roku jest mniejszy, ale cz\u0119\u015b\u0107 liczb 16-cyfrowych jest wi\u0119ksza. W mikrosekundach granica odpowiada 5 czerwca 2255 o 23:47:34.740991 UTC. <code>Date<\/code> nadal operuje milisekundami; dok\u0142adnej liczby ca\u0142kowitej mikrosekund nie mo\u017cna przekaza\u0107 bez zmiany jako warto\u015bci Date.<\/p>\n<h3>Co dzieje si\u0119 z nanosekundami w JSON?<\/h3>\n<p>Obecne nanosekundy Unix przekraczaj\u0105 bezpieczny zakres liczb ca\u0142kowitych JavaScriptu. Niekt\u00f3re warto\u015bci pozostaj\u0105 przypadkowo reprezentowalne, ale s\u0105siednie ju\u017c nie. Ci\u0105g cyfr dziesi\u0119tnych i p\u00f3\u017aniejsze <code>BigInt<\/code> zachowuj\u0105 liczb\u0119. Konwersja na BigInt po zaokr\u0105gleniu podczas odczytu jako <code>Number<\/code> nie odzyskuje utraconych cyfr. Redukcja do milisekund \u015bwiadomie zmniejsza dok\u0142adno\u015b\u0107.<\/p>\n<h3>Czy UTC jako strefa us\u0142ugi usuwa wszystkie rozbie\u017cno\u015bci dzienne?<\/h3>\n<p>UTC ujednolica wybran\u0105 granic\u0119 dnia, lecz nie r\u00f3\u017cne znaczenia p\u00f3l, przetwarzanie ani atrybucj\u0119. Dla dnia dzia\u0142alno\u015bci w Berlinie lokalna strefa nadal mo\u017ce by\u0107 w\u0142a\u015bciwa. Zmiana strefy us\u0142ugi dotyczy przysz\u0142ych danych i mo\u017ce wywo\u0142a\u0107 przej\u015bciowe efekty w raportach; ca\u0142a historia nie jest przeliczana ponownie.<\/p>\n<h3>Jak zbada\u0107 nieprawid\u0142owy zegar serwera?<\/h3>\n<p><code>timedatectl status<\/code> pokazuje stan synchronizacji w odpowiednich systemach Linux. Brak synchronizacji nie potwierdza konkretnej r\u00f3\u017cnicy czasu. Istotne s\u0105 r\u00f3wnie\u017c odchylenie wskazywane przez u\u017cywan\u0105 us\u0142ug\u0119 czasu, ostatnia udana synchronizacja i dost\u0119pno\u015b\u0107 \u017ar\u00f3d\u0142a. Nag\u0142\u00f3wek HTTP <code>Date<\/code> daje tylko przybli\u017con\u0105 kontrol\u0119: pami\u0119\u0107 podr\u0119czna, czas transmisji, dok\u0142adno\u015b\u0107 do pe\u0142nych sekund oraz infrastruktura odpowiedzi ograniczaj\u0105 wnioski. Dok\u0142adno\u015b\u0107 pomiaru do jednej sekundy nie jest gwarantowana.<\/p>\n<\/div>\n<h2>\u0179r\u00f3d\u0142a i dokumentacja techniczna<\/h2><ul><li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc3339.html\">RFC3339<\/a><\/li><li><a href=\"https:\/\/tc39.es\/ecma262\/multipage\/numbers-and-dates.html\">ECMAScript: liczby i daty<\/a><\/li><li><a href=\"https:\/\/docs.python.org\/3\/library\/datetime.html\">Python: datetime<\/a><\/li><li><a href=\"https:\/\/docs.python.org\/3\/library\/zoneinfo.html\">Python: zoneinfo<\/a><\/li><li><a href=\"https:\/\/support.google.com\/analytics\/answer\/7029846?hl=en\">GA4: schemat eksportu BigQuery<\/a><\/li><li><a href=\"https:\/\/docs.cloud.google.com\/bigquery\/docs\/reference\/standard-sql\/timestamp_functions\">BigQuery: funkcje znacznik\u00f3w czasu<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/google-ads\/api\/reference\/rpc\/v25\/ClickConversion\">Google Ads: ClickConversion<\/a><\/li><li><a href=\"https:\/\/raw.githubusercontent.com\/facebook\/facebook-nodejs-business-sdk\/main\/src\/objects\/serverside\/server-event.js\">Meta: ServerEvent SDK<\/a><\/li><li><a href=\"https:\/\/support.google.com\/analytics\/answer\/9744165?hl=en\">GA4: strefa czasowa us\u0142ugi<\/a><\/li><li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9110.html#name-date\">RFC9110: Date<\/a><\/li><li><a href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/latest\/timedatectl.html\">systemd: timedatectl<\/a><\/li><li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/datalayer\">GTM: warstwa danych<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Przeliczanie sekund, milisekund i mikrosekund z jawn\u0105 jednostk\u0105. Rozr\u00f3\u017cnienie daty i chwili, poprawne por\u00f3wnanie p\u00f3l GA4 oraz obs\u0142uga zmian czasu i ogranicze\u0144 dok\u0142adno\u015bci JavaScriptu.<\/p>\n","protected":false},"author":1,"featured_media":30218,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[117],"tags":[92084,92229,92100,92238],"class_list":["post-13164","post","type-post","status-publish","format-standard","hentry","category-tutorials-pl","tag-bigquery-pl","tag-devops-pl","tag-google-analytics-4-pl","tag-tutorial-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Rozr\u00f3\u017cnienie pi\u0119ciu format\u00f3w po liczbie cyfr, przeliczanie w BigQuery i granica dnia, na kt\u00f3rej event_date i event_timestamp si\u0119 rozchodz\u0105.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Rozr\u00f3\u017cnienie pi\u0119ciu format\u00f3w po liczbie cyfr, przeliczanie w BigQuery i granica dnia, na kt\u00f3rej event_date i event_timestamp si\u0119 rozchodz\u0105.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-26T16:25:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T12:32:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-13160-13164.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie\",\"datePublished\":\"2026-09-26T16:25:00+00:00\",\"dateModified\":\"2026-10-26T12:32:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/\"},\"wordCount\":1361,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll2-13160-13164.png\",\"keywords\":[\"BigQuery\",\"DevOps\",\"Google Analytics 4\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/\",\"name\":\"Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll2-13160-13164.png\",\"datePublished\":\"2026-09-26T16:25:00+00:00\",\"dateModified\":\"2026-10-26T12:32:46+00:00\",\"description\":\"Rozr\u00f3\u017cnienie pi\u0119ciu format\u00f3w po liczbie cyfr, przeliczanie w BigQuery i granica dnia, na kt\u00f3rej event_date i event_timestamp si\u0119 rozchodz\u0105.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll2-13160-13164.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll2-13160-13164.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-analytics-pl\\\/tutorials-pl\\\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie | Lukas Wojcik","description":"Rozr\u00f3\u017cnienie pi\u0119ciu format\u00f3w po liczbie cyfr, przeliczanie w BigQuery i granica dnia, na kt\u00f3rej event_date i event_timestamp si\u0119 rozchodz\u0105.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie | Lukas Wojcik","og_description":"Rozr\u00f3\u017cnienie pi\u0119ciu format\u00f3w po liczbie cyfr, przeliczanie w BigQuery i granica dnia, na kt\u00f3rej event_date i event_timestamp si\u0119 rozchodz\u0105.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-26T16:25:00+00:00","article_modified_time":"2026-10-26T12:32:46+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-13160-13164.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie","datePublished":"2026-09-26T16:25:00+00:00","dateModified":"2026-10-26T12:32:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/"},"wordCount":1361,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-13160-13164.png","keywords":["BigQuery","DevOps","Google Analytics 4","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/","name":"Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-13160-13164.png","datePublished":"2026-09-26T16:25:00+00:00","dateModified":"2026-10-26T12:32:46+00:00","description":"Rozr\u00f3\u017cnienie pi\u0119ciu format\u00f3w po liczbie cyfr, przeliczanie w BigQuery i granica dnia, na kt\u00f3rej event_date i event_timestamp si\u0119 rozchodz\u0105.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-13160-13164.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-13160-13164.png","width":1200,"height":630,"caption":"Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-analytics-pl\/tutorials-pl\/tutorial-piec-formatow-znacznika-czasu-w-stosie-pomiarowym-i-ich-przeliczanie\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Pi\u0119\u0107 format\u00f3w znacznika czasu w stosie pomiarowym i ich przeliczanie"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13164","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=13164"}],"version-history":[{"count":7,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13164\/revisions"}],"predecessor-version":[{"id":27416,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13164\/revisions\/27416"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/30218"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=13164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}