MySQL signed unix_timestamp per convertire date precedenti al 1-1-1970

su TYPO3 le date sono salvate come unix_timestamp, un numero intero positivo se successive al 1-1-1970, negativo se precendenti.

MySQL ha una funzione UNIX_TIMESTAMP che restituisce zero per le date precedenti al 1-1-1970, quindi è sufficiente dichiarare una funzione SIGNED_UNIX_TIMESTAMP e usarla:

DELIMITER |
CREATE FUNCTION SIGNED_UNIX_TIMESTAMP (d DATETIME)
RETURNS BIGINT
 DETERMINISTIC
  BEGIN
    DECLARE tz VARCHAR(100);
    DECLARE ts BIGINT;
    SET tz = @@time_zone;
    SET time_zone = '+00:00';
    SELECT DATEDIFF(d, FROM_UNIXTIME(0)) * 86400 +
    TIME_TO_SEC(
      TIMEDIFF(
        d,
        DATE_ADD(MAKEDATE(YEAR(d), DAYOFYEAR(d)), INTERVAL 0 HOUR)
      )
    ) INTO ts;
    SET time_zone = tz;
    return ts;
  END|
DELIMITER ;

Poi usata ad esempio così:

UPDATE fe_users SET
`date_of_birth` = SIGNED_UNIX_TIMESTAMP('1955-10-21'),
WHERE 1

Nota: il campo date_of_birth è aggiunto dall’estensione sr_feuser_register

Leave a Reply