IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Dates] Limite des fonctions natives DATE


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut [Dates] Limite des fonctions natives DATE
    Bonjour,

    Voilà, j'utilise des timestamp unix pour stocker des dates précises dans une base de données. Il s'agit donc d'un entier (INT32) déterminant le nombre de secondes écoulées depuis 1970.

    Seulement voilà, un imprévu m'oblige à revoir ce système pour prendre en compte des date antérieures (a partir de 1900). Ca me fait hyper mal de devoir renoncer à ce système car hyper pratique compte tenu des fonctions dispos, précis et surtout tout le code de l'appli existante se base la dessus.

    Quand j'y pense, faut vraiment être radin pour stocker 60 ans en secondes sur un INT32... Un INT64 m'aurait épargné ce post !

    Existe t-il donc une solution pour faire en sorte que PHP travail sur des timestamp unix de 64 bits (paramémtrage PHP, recompilation apache, librairie indépendante) ??

    En vous remerciant par avance !

  2. #2
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 910
    Par défaut recherches et tests
    J'ai essayé de trouver un truc pour ton problème de dates antérieures à 1970 mais sans succés. Cependant, il y a une question qui m'est venu à l'esprit. Si le time stamp Unix retourne le nombre de secondes depuis 1970, alors au 1er janvier 1970 à 0h00 il retournait le nombre 0. Ce qui signifie qu'avant 1970, il devrait retourner un nombre négatif.

    exemple pour le 31 décembre 1969 à 23h59mn59s, il devrait retourner -1.

    Donc est-il possible que cela pose problème et que pour cette raison, je crains qu'il n'y ait pas de solutions en ce qui concerne un timestamp avant 1970...

  3. #3
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    A l'inverse de windows, le php sous linux est supposé gérer les date inférieur à zero... Alors comment, j'en ai aucune idée... mais le fait est que ça doit être possible (si ça se trouve, ils utilisent les nombres négatifs pour passer outre 2038... puisqu'apres tout, caster un int signé négatif correspond a une correspondance avec un int non signé !

  4. #4
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 910
    Par défaut caster un négatif?
    Caster un float pour obtenir un int, je vois très bien comment faire. Mais caster un nombre négatif pour obtenir un nombre positif, j'aimerais bien que tu m'explique la manipulation.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Les fourchettes de timestamp :
    • sous linux
      • -2147483648 (1901-12-13 20:45:52)
      • +2147483647 (2038-01-19 03:14:07)
    • sous windows
      • 0 (1970-01-01 01:00:00)
      • 2147483647 (2038-01-19 03:14:07)


    A noter que le timestamp 0 (zéro) correspond au 1er janvier 1970 à 1 heure du matin, et non pas à 0 heure, cotrairement à ce que dit ce message d'erreur bien connu sous windows :
    Windows does not support dates prior to midnight (00:00:00), January 1, 1970
    A noter aussi que la fonction mktime() semble buggée. En effet :
    • mktime(3, 14, 7, 1, 19, 2038); donne -3601 soit 1969-12-31 23:59:59
    • mktime(27, 14, 7, 1, 18, 2038); donne 2147483647 soit 2038-01-19 03:14:07


    Toutes ces remarques ne sont que d'un intérêt très limité. C'était simplement pour occuper une partie de matinée d'un 15 août très pluvieux, voire même automnal.

  6. #6
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 910
    Par défaut pas si inutile
    Bravo et merci pour ces précisions.
    Je me coucherai plus futé ce soir.

    Bon en ce qui concerne la demande de gloubi, ça continue encore. Et j'attends aussi qu'il me réponde sur le fait de comment il caste un nombre négatif en nombre positif. Surtout que PHP ne reconnaît pas les nombres entiers non signés.

Discussions similaires

  1. [AC-2010] Limiter des résultats en fonction d'une date dans un entête de formulaire
    Par docjo dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/04/2013, 20h18
  2. [Dates] Ajouter des jours à la date d'aujourd'hui
    Par swissmade dans le forum Langage
    Réponses: 5
    Dernier message: 14/10/2008, 11h31
  3. [Dates] Appeler des fonctions sans attendre leurs résultats
    Par ipeteivince dans le forum Langage
    Réponses: 6
    Dernier message: 05/02/2008, 12h22
  4. [Dates] Ajouter des mois à une date
    Par tiger63 dans le forum Langage
    Réponses: 8
    Dernier message: 25/05/2007, 16h42
  5. [Dates] Afficher des données à la date du jour
    Par rastatom dans le forum Langage
    Réponses: 10
    Dernier message: 18/05/2006, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo