Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.lang.php > #15788 > unrolled thread

[cross] MySQL i timestamp

Started byRoman Tyczka <noemail@because.no>
First post2018-05-26 14:25 +0200
Last post2018-05-28 05:36 -0700
Articles 6 — 2 participants

Back to article view | Back to pl.comp.lang.php


Contents

  [cross] MySQL i timestamp Roman Tyczka <noemail@because.no> - 2018-05-26 14:25 +0200
    Re: [cross] MySQL i timestamp Arkadiusz Moch <arkadiusz.moch@gmail.com> - 2018-05-27 21:25 -0700
      Re: [cross] MySQL i timestamp Roman Tyczka <noemail@because.no> - 2018-05-28 13:32 +0200
        Re: [cross] MySQL i timestamp Roman Tyczka <noemail@because.no> - 2018-05-28 13:54 +0200
          Re: [cross] MySQL i timestamp Roman Tyczka <noemail@because.no> - 2018-05-28 14:30 +0200
          Re: [cross] MySQL i timestamp Arkadiusz Moch <arkadiusz.moch@gmail.com> - 2018-05-28 05:36 -0700

#15788 — [cross] MySQL i timestamp

FromRoman Tyczka <noemail@because.no>
Date2018-05-26 14:25 +0200
Subject[cross] MySQL i timestamp
Message-ID<136fubwhcunsl$.dlg@tyczka.com>
Witam,

Mam w tabeli kolumnę typu Timestamp. Edytorem (DBWorkbench) widzę, że
przedstawia ona wartość: 

26.05.2018 14:16:24

To prawidłowa wartość, bo pochodzi z chwili inserta (default
current_timestamp).
Teraz chcę odczytać wartość tego timestampa jako unix timestamp czyli int.
Z poziomu PHP za pomocą PDO otrzymuję wartość: 1527336984
Jednak ta liczba (wg. http://unixtimstamp.com) reprezentuje:

26.05.2018 12:16:24

Czyli przesunięte o 2h wstecz, zatem pewnie czas UTC.
Skąd to się bierze? I jak to poprawnie odczytać, żeby mieć tę wartość unix
timestampa poprawną?

-- 
pozdrawiam
Roman Tyczka

[toc] | [next] | [standalone]


#15789

FromArkadiusz Moch <arkadiusz.moch@gmail.com>
Date2018-05-27 21:25 -0700
Message-ID<a4f7f2c7-076f-44d7-adcc-7a3d5f0aa162@googlegroups.com>
In reply to#15788
W dniu sobota, 26 maja 2018 14:25:31 UTC+2 użytkownik Roman Tyczka napisał:
> Witam,
> 
> Mam w tabeli kolumnę typu Timestamp. Edytorem (DBWorkbench) widzę, że
> przedstawia ona wartość: 
> 
> 26.05.2018 14:16:24
> 
> To prawidłowa wartość, bo pochodzi z chwili inserta (default
> current_timestamp).
> Teraz chcę odczytać wartość tego timestampa jako unix timestamp czyli int.
> Z poziomu PHP za pomocą PDO otrzymuję wartość: 1527336984
> Jednak ta liczba (wg. http://unixtimstamp.com) reprezentuje:
> 
> 26.05.2018 12:16:24
> 
> Czyli przesunięte o 2h wstecz, zatem pewnie czas UTC.
> Skąd to się bierze? I jak to poprawnie odczytać, żeby mieć tę wartość unix
> timestampa poprawną?
> 
> -- 
> pozdrawiam
> Roman Tyczka

Sprawdź php.ini:

[...]
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Europe/Warsaw"
[...]

[toc] | [prev] | [next] | [standalone]


#15790

FromRoman Tyczka <noemail@because.no>
Date2018-05-28 13:32 +0200
Message-ID<iinebgrxzwkk$.dlg@tyczka.com>
In reply to#15789
On Sun, 27 May 2018 21:25:42 -0700 (PDT), Arkadiusz Moch wrote:

> W dniu sobota, 26 maja 2018 14:25:31 UTC+2 użytkownik Roman Tyczka napisał:
>> Witam,
>> 
>> Mam w tabeli kolumnę typu Timestamp. Edytorem (DBWorkbench) widzę, że
>> przedstawia ona wartość: 
>> 
>> 26.05.2018 14:16:24
>> 
>> To prawidłowa wartość, bo pochodzi z chwili inserta (default
>> current_timestamp).
>> Teraz chcę odczytać wartość tego timestampa jako unix timestamp czyli int.
>> Z poziomu PHP za pomocą PDO otrzymuję wartość: 1527336984
>> Jednak ta liczba (wg. http://unixtimstamp.com) reprezentuje:
>> 
>> 26.05.2018 12:16:24
>> 
>> Czyli przesunięte o 2h wstecz, zatem pewnie czas UTC.
>> Skąd to się bierze? I jak to poprawnie odczytać, żeby mieć tę wartość unix
>> timestampa poprawną?
>> 
>> -- 
>> pozdrawiam
>> Roman Tyczka
> 
> Sprawdź php.ini:
> 
> [...]
> [Date]
> ; Defines the default timezone used by the date functions
> ; http://php.net/date.timezone
> date.timezone = "Europe/Warsaw"
> [...]

Niestety na biznes-host nie ma dostępu do php.ini
Spróbowałem za pomocą funkcji w skrypcie:

date_default_timezone_set('Europe/Warsaw');

ale nic to nie dało. 

A czy jest jakaś funkcja w PHP, której zapodam unix timestampa w UTC i ona
skoryguje go do lokalnego czasu serwera? Nie mogę nic takiego znaleźć.

-- 
pozdrawiam
Roman Tyczka

[toc] | [prev] | [next] | [standalone]


#15791

FromRoman Tyczka <noemail@because.no>
Date2018-05-28 13:54 +0200
Message-ID<nqi3td966fj2$.dlg@tyczka.com>
In reply to#15790
On Mon, 28 May 2018 13:32:31 +0200, Roman Tyczka wrote:

> A czy jest jakaś funkcja w PHP, której zapodam unix timestampa w UTC i ona
> skoryguje go do lokalnego czasu serwera? Nie mogę nic takiego znaleźć.

Próbuję tak:

  $date = new DateTime();

  //ustawiam UTC 
  $dtz = new DateTimeZone('UTC');
  $date->setTimezone($dtz);
  $date->setTimestamp($input_timestamp);

  //zmieniam timezone na nasz
  $dtz = new DateTimeZone('Europe/Warsaw');
  $date->setTimezone($dtz);

  $x = $date->getTimestamp();
  $y = $x - $dateOfForgotten;


i $y zawsze jest zero, bez względu jak ustawiam timezone.

Czego nie ogarniam?

-- 
pozdrawiam
Roman Tyczka

[toc] | [prev] | [next] | [standalone]


#15792

FromRoman Tyczka <noemail@because.no>
Date2018-05-28 14:30 +0200
Message-ID<hbpy6n927uzi$.dlg@tyczka.com>
In reply to#15791
On Mon, 28 May 2018 13:54:05 +0200, Roman Tyczka wrote:

>   $x = $date->getTimestamp();
>   $y = $x - $dateOfForgotten;
> 
> 
> i $y zawsze jest zero, bez względu jak ustawiam timezone.
> 
> Czego nie ogarniam?

oczywiście pomyliłem kod, ostatnia linijka:

$y = $x - $input_timestamp;


-- 
pozdrawiam
Roman Tyczka

[toc] | [prev] | [next] | [standalone]


#15793

FromArkadiusz Moch <arkadiusz.moch@gmail.com>
Date2018-05-28 05:36 -0700
Message-ID<5ec7db36-9b3e-4777-ac54-ea2b626d9a08@googlegroups.com>
In reply to#15791
Polecam Debugger:
https://www.eclipse.org/downloads/packages/eclipse-php-developers/oxygen3a

Prześledź u siebie krok po kroku swój skrypt, bo tu nie widać jaką wartość mają zmienne:
$input_timestamp
$dateOfForgotten

W moim debuggerze widać jak niżej:
$date = new DateTime(); // $date->date=="2018-05-28 14:26:49.000000"
$dtz = new DateTimeZone('UTC'); 
$date->setTimezone($dtz);  // $date->date=="2018-05-28 12:26:49.000000"

a potem już nie sensu debuggować, bo nie wiadomo jaka jest wartość $input_timestamp.

[toc] | [prev] | [standalone]


Back to top | Article view | pl.comp.lang.php


csiph-web