Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > dk.edb.database > #1381

Re: PHP/MySQL problem med timestamp

From Arne Vajhøj <arne@vajhoej.dk>
Newsgroups dk.edb.database
Subject Re: PHP/MySQL problem med timestamp
Date 2018-01-13 14:42 -0500
Organization Aioe.org NNTP Server
Message-ID <p3dnfb$lcl$1@gioia.aioe.org> (permalink)
References <5a5a0fad$0$726$14726298@news.sunsite.dk>

Show all headers | View raw


On 1/13/2018 8:54 AM, Dennis Munding wrote:
> Jeg er i gang med at lave en hjemmeside for nogle online-gamere og i
> den forbindelse, er jeg stødt på et "lille" problem.
> 
> Ejeren af siden vil gerne have vist en fejring af "jubilæer" i klanen
> på siden. Ikke noget problem.
> 
> Problemet består i, at han gerne vil have det vist på selve dagen og en
> uge frem.
> Det er "intervallet" af jubilæer, der knækker mig: 1, 3, 6, 9 og 18
> mdr. samt årligt.
> Havde det kun været årligt ville jeg nok selv kunne løse det, men jeg
> har fået stirret mig blind.
> 
> Min php-kode til funktionen ser således ud:

> Det fungerer glimrende på selve dagen, som I kan se her -
> http://1dpb.dk/?side=test - men jeg kan ikke gennemskue, hvordan jeg
> får min "mission" til at lykkes...
> 
> Indmeldelsestidspunktet ($indmeldt) indsættes som timestamp ved hjælp
> af strtotime() funktionen, hvis det er en hjælp.
> 
> Alle konstruktive indspark (også til evt. optimering af ovenstående
> kode) modtages med taknemmelighed. :-)

Hvordan jeg ville angribe problemet:

<?php
class AnniversaryPolicyItem {
     public $descrip;
     public $interval;
     public function __construct($descrip, $interval) {
         $this->descrip = $descrip;
         $this->interval = $interval;
     }
}

class AnniversaryPolicy {
     private $before;
     private $after;
     private $format;
     private $annlist;
     public function __construct($daysbefore, $daysafter, $format = 
'd/m/Y') {
         $this->before = new DateInterval('P' . $daysbefore . 'D');
         $this->after = new DateInterval('P' . $daysafter . 'D');
         $this->format = $format;
         $this->annlist = array();
     }
     public function add($descrip, $interval) {
         $this->annlist[] = new AnniversaryPolicyItem($descrip, new 
DateInterval($interval));
     }
     public function getAnniversary($ts) {
         $now = new DateTime();
         $t1 = $now->sub($this->before);
         $t1->setTime(0, 0, 0);
         $now = new DateTime();
         $t2 = $now->add($this->after);
         $t2->setTime(23, 59, 59);
         foreach($this->annlist as $annitem) {
             $tsdt = new DateTime();
             $tsdt->setTimestamp($ts);
             $anntim = $tsdt->add($annitem->interval);
             if($t1->getTimestamp() <= $anntim->getTimestamp() && 
$anntim->getTimestamp() <= $t2->getTimestamp()) {
                 return $annitem->descrip . ' ' . 
$anntim->format($this->format);
             }
         }
         return null;
     }
}

function test($annpol, $ts) {
     $ann = $annpol->getAnniversary($ts);
     if($ann != null) {
         echo "$ann\r\n";
     } else {
         echo "No anniversary\r\n";
     }
}

$annpol = new AnniversaryPolicy(2, 2);
$annpol->add('1 year anniversay', 'P1Y');
$annpol->add('3 months anniversary', 'P3M');
$annpol->add('1 month anniversary', 'P1M');

test($annpol, time() - 28*24*60*60);
test($annpol, time() - 31*24*60*60);
test($annpol, time() - 34*24*60*60);
test($annpol, time() - 82*24*60*60);
test($annpol, time() - 92*24*60*60);
test($annpol, time() - 102*24*60*60);
test($annpol, time() - 255*24*60*60);
test($annpol, time() - 365*24*60*60);
test($annpol, time() - 375*24*60*60);

?>

Arne

Back to dk.edb.database | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

PHP/MySQL problem med timestamp "Dennis Munding" <nospa@mplease.dk> - 2018-01-13 13:54 +0000
  Re: PHP/MySQL problem med timestamp "Dennis Munding" <nospa@mplease.dk> - 2018-01-13 14:44 +0000
  Re: PHP/MySQL problem med timestamp Arne Vajhøj <arne@vajhoej.dk> - 2018-01-13 14:42 -0500
    Re: PHP/MySQL problem med timestamp "Dennis Munding" <nospa@mplease.dk> - 2018-01-15 16:41 +0000
      Re: PHP/MySQL problem med timestamp Arne Vajhøj <arne@vajhoej.dk> - 2018-01-15 11:52 -0500
        Re: PHP/MySQL problem med timestamp "Dennis Munding" <nospa@mplease.dk> - 2018-01-16 21:27 +0000
          Re: PHP/MySQL problem med timestamp Arne Vajhøj <arne@vajhoej.dk> - 2018-01-16 19:56 -0500
  Re: PHP/MySQL problem med timestamp Jan Hansen <jhjjhjhhansen@gmail.com> - 2018-01-17 03:26 +0000
    Re: PHP/MySQL problem med timestamp Jan Hansen <jhjjhjhhansen@gmail.com> - 2018-01-17 04:32 +0000
    Re: PHP/MySQL problem med timestamp (rettet udgave) Jan Hansen <jhjjhjhhansen@gmail.com> - 2018-01-17 04:42 +0000
    Re: PHP/MySQL problem med timestamp "Dennis Munding" <nospa@mplease.dk> - 2018-01-17 10:15 +0000
      Re: PHP/MySQL problem med timestamp Jan Hansen <jhjjhjhhansen@gmail.com> - 2018-01-17 12:28 +0000
        Re: PHP/MySQL problem med timestamp "Dennis Munding" <nospa@mplease.dk> - 2018-01-20 14:27 +0000

csiph-web