🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.php
6 messages
6 total messages Started by Roman Tyczka Sat, 26 May 2018 12:25
[cross] MySQL i timestamp
#232003
Author: Roman Tyczka
Date: Sat, 26 May 2018 12:25
22 lines
1770 bytes
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
Re: [cross] MySQL i timestamp
#232004
Author: Arkadiusz Moch
Date: Mon, 28 May 2018 04:25
32 lines
2387 bytes
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"
[...]
Re: [cross] MySQL i timestamp
#232005
Author: Roman Tyczka
Date: Mon, 28 May 2018 11:32
48 lines
2555 bytes
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
Re: [cross] MySQL i timestamp
#232006
Author: Roman Tyczka
Date: Mon, 28 May 2018 11:54
29 lines
1586 bytes
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
Re: [cross] MySQL i timestamp
#232008
Author: Roman Tyczka
Date: Mon, 28 May 2018 12:30
18 lines
1287 bytes
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
Re: [cross] MySQL i timestamp
#232007
Author: Arkadiusz Moch
Date: Mon, 28 May 2018 12:36
13 lines
2006 bytes
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.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads