[PHP x64] Touts les vendredis 13 pendant 31000 ans

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par michel.leonard, 15 Juillet 2012.

  1. michel.leonard
    michel.leonard WRInaute occasionnel
    Inscrit:
    1 Juin 2010
    Messages:
    366
    J'aime reçus:
    0
    Salut, voici une fonction qui peut s'avérer utile, dans certains cas...

    PHP:
    <span class="syntaxdefault">function vendredi_13</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">false</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$nombre</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">10</span><span class="syntaxkeyword">)<br />{<br /></span><span class="syntaxdefault">setlocale</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">LC_ALL</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'fr_FR.utf8'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">strrpos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'-'</span><span class="syntaxkeyword">))<br />{<br /></span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">array_map</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'intval'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">explode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'-'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(@</span><span class="syntaxdefault">checkdate</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">],</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">],</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">]))<br /></span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">mktime</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">12</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">],</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">],</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">]);<br />else<br /></span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">time</span><span class="syntaxkeyword">();<br />}<br /></span><span class="syntaxdefault">$resultat</span><span class="syntaxkeyword">=array();<br /></span><span class="syntaxdefault">$nombre</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">intval</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$nombre</span><span class="syntaxkeyword">);<br />if(</span><span class="syntaxdefault">$nombre</span><span class="syntaxkeyword">></span><span class="syntaxdefault">50</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> $nombre</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">50</span><span class="syntaxkeyword">;<br />if(</span><span class="syntaxdefault">$nombre</span><span class="syntaxkeyword"><-</span><span class="syntaxdefault">50</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> $nombre</span><span class="syntaxkeyword">=-</span><span class="syntaxdefault">50</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$nombre</span><span class="syntaxkeyword">></span><span class="syntaxdefault">0</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">65536</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">$ord</span><span class="syntaxkeyword">=</span><span class="syntaxstring">'next'</span><span class="syntaxkeyword">;}<br /></span><span class="syntaxdefault">elseif </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$nombre</span><span class="syntaxkeyword"><</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">=-</span><span class="syntaxdefault">65536</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">$ord</span><span class="syntaxkeyword">=</span><span class="syntaxstring">'last'</span><span class="syntaxkeyword">;}<br /></span><span class="syntaxdefault">else return $resultat</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$nombre</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">abs</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$nombre</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(!</span><span class="syntaxdefault">is_int</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">))</span><span class="syntaxdefault">  $timestap</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">time</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">intval</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(!(</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">>=-</span><span class="syntaxdefault">29032387761 </span><span class="syntaxkeyword">&&</span><span class="syntaxdefault"> $timestap</span><span class="syntaxkeyword"><=</span><span class="syntaxdefault">884572959599</span><span class="syntaxkeyword">))<br /></span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">time</span><span class="syntaxkeyword">();<br />while(</span><span class="syntaxdefault">count</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$resultat</span><span class="syntaxkeyword">)<</span><span class="syntaxdefault">$nombre</span><span class="syntaxkeyword">)<br />{<br /></span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">strtotime</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ord</span><span class="syntaxkeyword">.</span><span class="syntaxstring">' friday'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $timestap</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$dt</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">explode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">' '</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">date</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'m d Y'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">mktime</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">12</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$dt</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">],</span><span class="syntaxdefault">$dt</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">],</span><span class="syntaxdefault">$dt</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">]);<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$dt</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]==</span><span class="syntaxdefault">13</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> $resultat</span><span class="syntaxkeyword">[]=</span><span class="syntaxdefault">ucwords</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">strftime</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'%A %d %B %Y'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">$timestap</span><span class="syntaxkeyword">+=</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">;<br />}<br /></span><span class="syntaxdefault">return $resultat</span><span class="syntaxkeyword">;<br />}<br /><br /></span><span class="syntaxdefault">  </span>
    Essai avec :

    PHP:
    <span class="syntaxdefault">print_r</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">vendredi_13</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'15-07-2012'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">10</span><span class="syntaxkeyword">));</span><span class="syntaxdefault"> </span>
    Retourne :

    PHP:
    <span class="syntaxdefault"><br /></span><span class="syntaxcomment">/*<br />Array<br />(<br />[0] = Vendredi 13 Septembre 2013<br />[1] = Vendredi 13 Décembre 2013<br />[2] = Vendredi 13 Juin 2014<br />[3] = Vendredi 13 Février 2015<br />[4] = Vendredi 13 Mars 2015<br />[5] = Vendredi 13 Novembre 2015<br />[6] = Vendredi 13 Mai 2016<br />[7] = Vendredi 13 Janvier 2017<br />[8] = Vendredi 13 Octobre 2017<br />[9] = Vendredi 13 Avril 2018<br />)<br />*/<br /></span><span class="syntaxdefault">  </span>
     
  2. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 249
    J'aime reçus:
    0
    Quoi tu veux faire peur à tes visiteurs tous les vendredi 13 ? :D
     
  3. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 126
    J'aime reçus:
    318
  4. michel.leonard
    michel.leonard WRInaute occasionnel
    Inscrit:
    1 Juin 2010
    Messages:
    366
    J'aime reçus:
    0
    Dans le titre il est précisé x64 : ce qui signifie que le code nécessite une architecture 64bits.
    Si vous désirez une version 32 bits, elle sera limitée à 1 siècle tout au plus...
    Enfin, il est théoriquement possible, même en 32 bits de faire un code qui admet les timestaps d'une longueur extrème...

    Voici le problème en 32 bits :
    [​IMG]

    En 64 bits la limite est repoussée sur une durée bien plus importante...bien plus importante que l'âge de l'univers...
     
  5. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 126
    J'aime reçus:
    318
    Ooops en effet, bien vu Mike :)
     
  6. michel.leonard
    michel.leonard WRInaute occasionnel
    Inscrit:
    1 Juin 2010
    Messages:
    366
    J'aime reçus:
    0
    notez que ce code fonctionne sur free.fr
     
Chargement...
Similar Threads - [PHP x64] Touts Forum Date
Astuce [PHP] Récolter ville, pays du visiteur Développement d'un site Web ou d'une appli mobile 9 Mars 2021
[PHPWhois.fr] Vérifiez la disponibilité d'un nom de domaine Demandes d'avis et de conseils sur vos sites 10 Décembre 2020
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 14 Septembre 2019
[PHP/MySQL] Choix du moteur MyISAM ou InnoDB ? Développement d'un site Web ou d'une appli mobile 14 Janvier 2017
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 12 Janvier 2017
[php/mysql] Eviter de faire 20 requêtes pour un affichage Développement d'un site Web ou d'une appli mobile 19 Janvier 2016
[PHP] Cookie vide dans une fonction, complet juste avant ou après Développement d'un site Web ou d'une appli mobile 25 Novembre 2014
[php] Cookie d'un domaine vers un sous-domaine Développement d'un site Web ou d'une appli mobile 29 Août 2014
[PHP]Cci mails Développement d'un site Web ou d'une appli mobile 18 Août 2014
[PHP] gethostbyname Développement d'un site Web ou d'une appli mobile 15 Février 2014