CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[php] Timestamps négatifs

gugus963
gugus963
Niveau 10
28 janvier 2007 à 19:50:17

:hello:

J´ai un petit problème, dans un formulaire, je récupère la date de naissance sous la forme jj/mm/aaaa, que je transforme avec regex + explode() + mktime() en timestamp. Seulement, si la personne est née avant 1970, cela provoque une erreur :
Warning: mktime(): Windows does not support negative values for this function in d:\documents\enoobs\fonctions\check.func.php on line 295
:(
Ce qui est évident, car windows ne gère pas les timestamps négatifs (seuls les systèmes sous unix les gère...)
Mais ça a beau être évident, c´est également chiant, car je sais bien que la plupart des utilisateurs du nets sont jeunes, mais il y en a de plus de 37 ans aussi...
J´ai besoin de contourner ce problème. Merci :)

gugus963
gugus963
Niveau 10
28 janvier 2007 à 19:59:36

"Notes

Attention
Avant PHP 5.1.0, les valeurs négatives des timestamp ne sont pas supportées sous toutes les versions actuelles de Microsoft Windows. De ce fait, l´intervalle valide pour les années est de 1970 à 2038, inclus."

:d) Mouais c´est bien beau, mais j´aurai pas php 5.1 tant que wamp ne marchera pas correctement :-(( ...
Et sur l´hébergeur, c´est pas dit non plus qu´il y ait linux ou php 5... bref

deepblue
deepblue
Niveau 16
28 janvier 2007 à 20:46:33

Ben tu peux faire avec du negatif...
Un peu de maths :
Soit un timestamp = Y;
Timestamp actuel = X;
valeur_absolue_de_Y + X et voila :ok:

gugus963
gugus963
Niveau 10
28 janvier 2007 à 21:01:43

le problème, c´est que si $aaaa < 1970,
mktime(0, 0, 0, $jj, $mm, $aaaa);
retournera une erreur... Je ne vois pas comment faire ici

deepblue
deepblue
Niveau 16
28 janvier 2007 à 21:48:05

tu as lu ce que j´ai mis ??
Si ton timestamp négatif = -1000
Que le timestamp actuel = 12345789
Le type aura vecu 12345789 + 1000, soit le timstamp actuel plus la valeur absolue du timestamp negatif

Si on parle en tant qua distance

a |------|c|-----------------| b |------|d
ab == cb + ac == bd
(imagine que "c" est le timestamp = 0)

deepblue
deepblue
Niveau 16
28 janvier 2007 à 21:59:35

ab == ac+cb == cd

gugus963
gugus963
Niveau 10
28 janvier 2007 à 22:42:25

Désolé, je suis peut être trop nul en maths (pourtant il me semble pas...), mais j´arrive pas bien à comprendre.
si j´ai $ddn = 22/02/1961
bon avec list(j, m, a) = explode(´/´, $ddn)
et $t = mktime(0, 0, 0, m, j, a);
cela retournera une erreur. Je ne peux même pas récupérer le timestamp que j´additionnerais au timestamp actuel.
Ou alors tu proposes que je dises que date(´d/m/Y´, 0) = 01/01/1970 et qu´ensuite je fasse une soustraction du style $neg = 22/02/1961 - 01/01/1970 (avec une fonction, mais c´est pas le problème), et qu´en suite j´additionne le timestamp acutel et $neg ?
Un truc du style ? Oui, c´est pas con, seulement, faudrait une fonction qui calcule automatiquement la différence entre 22/02/1961 et 01/01/1970 en prenant compte des années bisexstiles etc...

gugus963
gugus963
Niveau 10
28 janvier 2007 à 22:43:42

Ou alors tu proposes que je dises que date(´d/m/Y´, 0) = 01/01/1970 et qu´ensuite je fasse une soustraction du style $neg = 22/02/1961 - 01/01/1970

:d)

Ou alors tu proposes que je dises que date(´d/m/Y´, 0) = 01/01/1970 et qu´ensuite je fasse une soustraction du style $neg = 01/01/1970 - 22/02/1961

gugus963
gugus963
Niveau 10
29 janvier 2007 à 22:24:48

http://www.geneweb.fr/wall-UjWp1Nz3-php.htm
Peut être plus compréhensible là... :( Même si j´ai du faire des erreurs.

deepblue
deepblue
Niveau 16
29 janvier 2007 à 22:28:47

Je voyais le probleme dans l´autres sens (timstamp > date)
Je vais y reflechir

deepblue
deepblue
Niveau 16
29 janvier 2007 à 22:43:53

ça ne prend pas en compte les année bissectiles mais ça marche bien (precis de qq mois sans doute) :

<?php
$jj = 05;
$mm = 12;
$yy = 1968;

$diff_yy = (1970-$yy) * 635 * 24 * 3600 - $mm * 24 * 3600 - $jj * 3600 * 24;
echo (time() + $diff_yy) / (365 * 24 * 3600);
?>

deepblue
deepblue
Niveau 16
29 janvier 2007 à 22:47:58

http://www.geneweb.fr/test/timestamp_negatif.php

gugus963
gugus963
Niveau 10
29 janvier 2007 à 22:56:03

Merci, mais le problème c´est que ce n´est pas assez précis ^^.
Je vais plutot faire le champ ddn comme date ++/++/++++ que timestamp, donc.

MathieuN7
MathieuN7
Niveau 10
30 janvier 2007 à 00:45:19

Ben oué, arrête de vouloir faire le shadock !

gugus963
gugus963
Niveau 10
30 janvier 2007 à 20:07:03
  • MathieuN7 profil

* Posté le 30 janvier 2007 à 00:45:19 avertir modérateur
* Ben oué, arrête de vouloir faire le shadock !

?

Tidus1188
Tidus1188
Niveau 10
30 janvier 2007 à 20:12:29

"Pourquoi faire simple quand on peut faire compliqué..."

Le-Bannis3
Le-Bannis3
Niveau 3
31 janvier 2007 à 14:31:38

Moi j´ai un truc un peu long, certes, mais qui m´a l´air de fonctionner...
mais il marche que à partir de 1939 ...
Mais c´est déjà pas mal :oui:

Je te le mets :
http://www.geneweb.fr/wall-vpIrGtJf-php.htm

jehuty21
jehuty21
Niveau 10
31 janvier 2007 à 19:32:54

Pourquoi ne pas ce simplifier la vie en utilisant le bon type de colonne dans sa bdd?
Un petit DATE fera très bien l´affaire pour ton truc, ça évitera tout ce bidouillage.

le-bannis2
le-bannis2
Niveau 10
31 janvier 2007 à 19:34:06

Oui, mais c´est pour calculer l´âge précis :oui:

jehuty21
jehuty21
Niveau 10
31 janvier 2007 à 19:45:56

Et?
Tu veux le nombre d´année? Une soustraction avec YEAR()
Tu veux le nombre de jours? DATEDIFF est là
Le nombre de mois?
Le nombre de mois? PERIOD_DIFF te sauve.

Entre ce bricolage à deux sous et des fonctions toutes prêtes, il n´y a pas à hésiter (pour autant qu´on ne se traîne pas encore avec une sgbdr moisie).

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment