ScienceForChange / SoundCollect_backend

0 stars 0 forks source link

correct timestamp on observations #35

Closed OtariOboladzeSfC closed 2 months ago

OtariOboladzeSfC commented 3 months ago

sound observations have 2 hour offset on timestamp, even though the server is located in Frankfurt Germany that are on the same timezone as Barcelona Spain.

OtariOboladzeSfC commented 3 months ago

Solution: 'sudo timedatectl set-timezone Europe/Berlin'

As the server is on the same timezone as Berlin, changing timezone to Europe/Berlin will resolve this issue.

check timezone on linux: timedatectl

OtariOboladzeSfC commented 3 months ago

Changing timezone on the server did no effect on the docker containers, where it still shows old time zone. Investigating further

OtariOboladzeSfC commented 3 months ago

There are two was to correct this issue: modifying "docker compose" or modifying "docker image".

Even thought running container has a correct timezone through "docker compose", it still does not save time correctly, next solution is to modify "docker image"

OtariOboladzeSfC commented 3 months ago

Possible ways of doing it: https://docs.tibco.com/pub/om-ll/5.0.0/doc/html/GUID-0618A976-3E0A-4750-B44E-F329452C05CE.html#:~:text=In%20the%20case%20where%20you,its%20time%2Dzone%20as%20UTC.

OtariOboladzeSfC commented 2 months ago

image

only Docker host machine, docker API container and docker MYSQL container have the correct timestamp but observations still showing timezone incorrectly, investigating further by modifying proxy and nginx container timezones

CarlosMillanSfC commented 2 months ago

@OtariOboladzeSfC Me puedas dar un ejemplo de donde se muestra una observación con la hora incorrecta y cual debería ser la hora correcta? Para poder asegurarme con ese ejemplo si mi cambio o idea se ajusta a una solución válida.

OtariOboladzeSfC commented 2 months ago

las columnas created_at y updated_at en la tabla de observaciones tienen 2 horas de diferencia conla hora de creacion de observacion

CarlosMillanSfC commented 2 months ago

@OtariOboladzeSfC no, eso no es un ejemplo, eso son las columnas que tienen fecha y hora, yo me refiero a que si tienes un ejemplo de uso en el cual se ve esa diferencia, por ejemplo: Creo una observación desde la app a las 10:30 y cuando entro al dashboard o desde la propia app quiero ver información de esa observación figura en sus datos creada a las 08:30 o 12:30.

Eso me sirve para poder replicarlo yo, ver bien ese error y después poder probar cosas y si solucionan esa situación saber que voy en buena dirección o ya solucionado el problema.

OtariOboladzeSfC commented 2 months ago

ejemplo: he creado una observación hoy a las 13:03 y se ha guardado en la base de datos como 11:03. el ID de la observacion es '9c811560-422f-4dcb-b058-61208cec0402'

CarlosMillanSfC commented 2 months ago

Pero eso es normal @OtariOboladzeSfC , en la base de datos se guardan con la tz UTC, en Barcelona tenemos la GMT+2 (hora de verano de Europa central) que como ves indica +2 porque con respecto a la tz universal tiene +2 horas. Es correcto ese comportamiento

CarlosMillanSfC commented 2 months ago

Me estás pidiendo que todas las observaciones se guarden con la timezone de barcelona? Eso haría que cuando se guarden observaciones desde chile u países con una zona horaria distinta sea complicado que se muestre bien

OtariOboladzeSfC commented 2 months ago

sí, hay que añadir una columna más en la tabla de observaciones 'app_local_time' que guardará tiempo local del momento cuando se ha creado la observacion

OtariOboladzeSfC commented 2 months ago

solucion:

ObservationsController.php

    try {
        $local_time_api_response = Http::get('http://api.timezonedb.com/v2.1/get-time-zone', [
            'key' => 'API_KEY',
            'format' => 'json',
            'by' => 'position',
            'lat' => $validated['latitude'],
            'lng' => $validated['longitude'],
        ]);

        // convert response to object
        $local_time_api_response_object = $local_time_api_response->object();

        // add the user_local_time parameter to the validated array
        Arr::set($validated, 'user_local_time', $local_time_api_response_object->formatted);

        // return $this->error('local_time_api_response is: ' . $local_time_api_response_object->formatted);
    } catch (\Throwable $th) {
        return $this->error('Error when calling user_local_time api: ' . $th, Response::HTTP_INTERNAL_SERVER_ERROR);
    }