abonnement Unibet Coolblue
pi_76617688
Dat truucje van de 0e dag kun je inderdaad toepassen, maar met date('n') kun je ook achterhalen hoeveel dagen er in de huidige maand zitten (=laatste dag van de maand)
  zaterdag 9 januari 2010 @ 23:53:34 #252
12221 Tijn
Powered by MS Paint
pi_76617783
Zoiets?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
function lastSaturday($month$year)
{
    
// number of days in each month
    
$days_in_month = array(1=>312831303130313130313031);
    
// fix for leap year
    
if(date('L'mktime(0,0,0,$month,1,$year)) > 0$days_in_month[2] = 29;

    
// go through days of the month, starting at the end
    
for($day $days_in_month[$month]; $day 1$day--)
    {
        
// check if day is saturday
        
if(date('l'mktime(0,0,0,$month,$day,$year)) == 'Saturday')
        {
            
// yay *O*
            
return $day;
        }
    }
    
    
// boo ;(
    
return false;
}
?>
pi_76617808
Wat gebruiken jullie eigenlijk om PDFs on the fly te genereren? Ik gebruik nu al heel lange tijd FPDF ( http://www.fpdf.org ) maar ik ben er elke keer érg lang mee bezig om dynamische documenten te maken, die gedeeltelijk uit variabele content en gedeeltelijk uit vaste content bestaan. Nou is PDF scripts maken sowieso al niet mijn meest favoriete bezigheid, maar in .NET gaat het me een stuk sneller af met de iText / iSharp of dbAutoTrack libraries.

Welke raden jullie aan?
  zaterdag 9 januari 2010 @ 23:55:54 #254
12221 Tijn
Powered by MS Paint
pi_76617844
quote:
Op zaterdag 9 januari 2010 23:50 schreef Intrepidity het volgende:
Dat truucje van de 0e dag kun je inderdaad toepassen, maar met date('n') kun je ook achterhalen hoeveel dagen er in de huidige maand zitten (=laatste dag van de maand)
Ik denk dat je date('t') bedoelt. Dat is inderdaad wel handig en maakt het stukje in mijn code waarin ik dat opzoek overbodig
pi_76617867
Die array met dagen per maand is niet nodig:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function lastSaturday($month$year)
{
    
$days_in_month date('t'mktime(000$month1$year));

    
// go through days of the month, starting at the end
    
for($day $days_in_month$day 1$day--)
    {
        
// check if day is saturday
        
if(date('l'mktime(0,0,0,$month,$day,$year)) == 'Saturday')
        {
            
// yay
            
return $day;
        }
    }
    
    
// boo 
    
return false;
}
?>


Edit: Whoops, t was idd date('t')
  zaterdag 9 januari 2010 @ 23:58:11 #256
75592 GlowMouse
l'état, c'est moi
pi_76617926
op basis van date('t') en date('w') moet het in veel minder regels kunnen
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  zondag 10 januari 2010 @ 00:01:19 #257
12221 Tijn
Powered by MS Paint
pi_76618032
quote:
Op zaterdag 9 januari 2010 23:58 schreef GlowMouse het volgende:
op basis van date('t') en date('w') moet het in veel minder regels kunnen
Hoe zou date('w') het korter maken dan wat hierboven staat?

Het zijn trouwens maar 4 effectieve regels, de rest is er om het leesbaarder te maken, maar zou eventueel ook weg kunnen.
pi_76618053
quote:
Op zondag 10 januari 2010 00:01 schreef Tijn het volgende:

[..]

Hoe zou date('w') het korter maken dan wat hierboven staat?
Omdat je op basis van het dagnummer van de laatste dag in een keer het juiste aantal dagen er vanaf kunt trekken Dan heb je ook geen for-lus meer nodig.
  zondag 10 januari 2010 @ 00:05:01 #259
12221 Tijn
Powered by MS Paint
pi_76618153
quote:
Op zondag 10 januari 2010 00:02 schreef Intrepidity het volgende:

[..]

Omdat je op basis van het dagnummer van de laatste dag in een keer het juiste aantal dagen er vanaf kunt trekken Dan heb je ook geen for-lus meer nodig.
Oh zo. Ja, dan zou je het met een simpel sommetje kunnen oplossen.

Slim hoor
  zondag 10 januari 2010 @ 00:07:17 #260
75592 GlowMouse
l'état, c'est moi
pi_76618227
je krijgt dan zoiets
1
2
3
4
5
6
7
<?php
function lastSaturday($month$year) {
  
$daysInMonth date('t'mktime(0,0,0,$month,1,$year));
  
$lastday date('w'mktime(0,0,0,$month,$daysInMonth,$year));
  return 
$daysInMonth - (($lastday+1)%7);
}
?>


[ Bericht 4% gewijzigd door GlowMouse op 10-01-2010 00:20:48 ]
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_76618365
Ik ben nog even verder gaan puzzelen en heb nu een oplossing die Chandler-proof is

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
/**
 * @param <int> $weekday Dag van de week (0 .. 6 - Zondag .. Zaterdag)
 * @param <int> $month
 * @param <int> $year
 * @return <int> timestamp van de laatste ...dag van de maand
 */
function lastDayOfMonth($weekday$month null$year null) {
    if(
is_null($year)) {
        
$year date('Y');
    }
    if(
is_null($month)) {
        
$month date('m') + 1;
    } else {
        
$month++;
    }
    
$dayOfMonth 0;

    
$dayOfWeek date('w'mktime(000$month$dayOfMonth$year));
    
$dayOfMonth $weekday $dayOfWeek;
    if(
$dayOfMonth 0) {
        
//Verkeerde maand
        
$dayOfMonth -= 7;
    }
    return 
mktime(000$month$dayOfMonth$year);
}
?>


Werkt voor alle dagen van de week, gewoon met een parameter.
  zondag 10 januari 2010 @ 00:14:22 #262
12221 Tijn
Powered by MS Paint
pi_76618446
quote:
Op zondag 10 januari 2010 00:07 schreef GlowMouse het volgende:
je krijgt dan zoiets
[ code verwijderd ]
Hier komt alleen niet het goede antwoord uit
pi_76618549
quote:
Op zondag 10 januari 2010 00:11 schreef Light het volgende:
Ik ben nog even verder gaan puzzelen en heb nu een oplossing die Chandler-proof is
[ code verwijderd ]

Werkt voor alle dagen van de week, gewoon met een parameter.
Mooi, en netjes met params.

Ik prefereer leesbare, geïndente code over code die zo klein en compact mogelijk moet (tenzij het van belang is voor een merkbare performancewinst natuurlijk) zijn. Dat akelige Perl tijdperk waarin we zo absurd gelimiteerd waren zijn we inmiddels wel voorbij.

[ Bericht 5% gewijzigd door Tuvai.net op 10-01-2010 00:22:55 ]
pi_76618618
Achja, ieder z'n eigen ding he Ik kan er bijvoorbeeld niet tegen om de curly braces naast een klasse/functienaam te zetten Braces staan bij mij altijd op een volgende regel
En inderdaad, alles zo compact mogelijk maken heeft nauwelijks zin meer. PHP compileert en optimaliseert zijn code netjes tegenwoordig.
  zondag 10 januari 2010 @ 00:21:02 #265
75592 GlowMouse
l'état, c'est moi
pi_76618675
quote:
Op zondag 10 januari 2010 00:14 schreef Tijn het volgende:

[..]

Hier komt alleen niet het goede antwoord uit
nu wel
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_76618904
Zo heb ik een keer een leraar voor algoritmiek gehad die in een luie bui het huiswerk zo'n beetje alleen beoordeelde op het aantal coderegels Lang = fout, kort = goed. Heb voor de grap een keer een algoritme ingeleverd met een klein rekenfoutje maar als een hele korte oplossing en hij merkte er niks van
Maar tegenwoordig is het: code ruimtelijk opzetten en met veel commentaar, want schermruimte kost toch niks
pi_76619465
quote:
Op zondag 10 januari 2010 00:19 schreef Intrepidity het volgende:
Achja, ieder z'n eigen ding he Ik kan er bijvoorbeeld niet tegen om de curly braces naast een klasse/functienaam te zetten Braces staan bij mij altijd op een volgende regel
Ieder z'n ding idd. Ik vind het zo'n verspilling van ruimte om voor iedere curly brace open weer een nieuwe regel te beginnen. De sluit-brace staat wel op z'n eigen regel (behalve bij een if als er een else volgt).
quote:
En inderdaad, alles zo compact mogelijk maken heeft nauwelijks zin meer. PHP compileert en optimaliseert zijn code netjes tegenwoordig.
True, leesbaarheid is ook belangrijk. Maar 'k denk niet dat PHP je code zo verandert dat de berekening wordt geoptimaliseerd, dus een efficient algoritme verzinnen moet je wel zelf doen.
pi_76619714
quote:
Op zondag 10 januari 2010 00:17 schreef Tuvai.net het volgende:

[..]

Mooi, en netjes met params. [ afbeelding ]
Thanks
quote:
Ik prefereer leesbare, geïndente code over code die zo klein en compact mogelijk moet (tenzij het van belang is voor een merkbare performancewinst natuurlijk) zijn. Dat akelige Perl tijdperk waarin we zo absurd gelimiteerd waren zijn we inmiddels wel voorbij.
Eens Hoewel ik wel vaak probeer om code ook compact te houden, maar dat is vooral om dubbele dingen te voorkomen. Op hoe meer plekken je iets moet aanpassen, hoe groter de kans dat je een aanpassing vergeet.
pi_76620434
Ik zet curly braces ook meestal op een nieuwe regel, tenzij ik erg veel geneste statements heb waarvan bijvoorbeeld de code in de else blokjes maar één regel per keer is of zo. Het volgende stukje code wordt bijvoorbeeld érg lang als ik alle curly braces op een nieuwe regel zou zetten:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if( $expr1 )
{
   if( $expr2 )
   {
      if( $expr3 )
      {
         Klasje->Methode();
         
         if( $expr4 )
         { Klasje->EenMethode(); }
         else
         {
            Klasje->Meer();
            Klasje->Code();
         }
      }
      else
      { Klasje->Vaudje('omg'); }
   }
   else
   { Klasje->Vaudje('wtf'); }
}
else
{ Klasje->Vaudje('lol'); }


EDIT: En even een schaamteloze repost.
quote:
Op zaterdag 9 januari 2010 23:54 schreef Tuvai.net het volgende:
Wat gebruiken jullie eigenlijk om PDFs on the fly te genereren? Ik gebruik nu al heel lange tijd FPDF ( http://www.fpdf.org ) maar ik ben er elke keer érg lang mee bezig om dynamische documenten te maken, die gedeeltelijk uit variabele content en gedeeltelijk uit vaste content bestaan. Nou is PDF scripts maken sowieso al niet mijn meest favoriete bezigheid, maar in .NET gaat het me een stuk sneller af met de iText / iSharp of dbAutoTrack libraries.

Welke raden jullie aan?
pi_76623733
Lol ben ik even wezen slapen en kom terug zie ik een heuse discussie over de laatste zaterdag v/d maand

Had zelf ook al een oplossing maar die bestond uit 25 regels waarbij ik alleen de maand/jaar als parameters meegaf. Het moet idd met heel weinig regels code kunnen... eens kijken wat ik met jullie codes kan

@Light; jou code is nice en werkt zoals bedoeld!

[ Bericht 11% gewijzigd door Chandler op 10-01-2010 09:13:02 ]
Just say hi!
  zondag 10 januari 2010 @ 20:51:35 #271
37634 wobbel
Da WoBBeL King
pi_76651136
quote:
Op vrijdag 8 januari 2010 12:25 schreef Tuvai.net het volgende:

[..]

Inderdaad niet meer van een kwestie van je code in een cronjob zetten die om de zoveel tijd draait. Vrijwel hetzelfde als wat je in Windows doet met executables en geplande taken / scheduled tasks.
Maar stel ik maak een factuur voor de klant aan, voeg ik dan 2 extra regels toe?

Veld "Periode" dus 14, 31, 365
Veld "Aantal" -1 is ongelimiteerd doorgaan, of 12 voor 12 maanden (als je voor 31 dagen hebt gekozen)

Of periode + aantal opgeven, en dan dmv een cronjob elke dag controleren of er een factuur gegenereerd moet worden. En dan als je maandelijks kiest dat hij het altijd op de 15e doet bijv.?
  zondag 10 januari 2010 @ 21:03:11 #272
12221 Tijn
Powered by MS Paint
pi_76651994
quote:
Op zondag 10 januari 2010 20:51 schreef wobbel het volgende:

[..]

Maar stel ik maak een factuur voor de klant aan, voeg ik dan 2 extra regels toe?

Veld "Periode" dus 14, 31, 365
Veld "Aantal" -1 is ongelimiteerd doorgaan, of 12 voor 12 maanden (als je voor 31 dagen hebt gekozen)

Of periode + aantal opgeven, en dan dmv een cronjob elke dag controleren of er een factuur gegenereerd moet worden. En dan als je maandelijks kiest dat hij het altijd op de 15e doet bijv.?
Ik zou zorgen dat je bij het aanmaken van een factuur de datum kunt opgeven waarop 'ie verzonden moet worden en dat geheel dan kunt opslaan in je database.

Vervolgens run je elke dag een cronjob die een script aanroept die kijkt of er facturen zijn die vandaag verzonden moeten worden en zo ja, dan doet 'ie dat.
pi_76655789
quote:
Op zondag 10 januari 2010 20:51 schreef wobbel het volgende:

[..]

Maar stel ik maak een factuur voor de klant aan, voeg ik dan 2 extra regels toe?

Veld "Periode" dus 14, 31, 365
Veld "Aantal" -1 is ongelimiteerd doorgaan, of 12 voor 12 maanden (als je voor 31 dagen hebt gekozen)

Of periode + aantal opgeven, en dan dmv een cronjob elke dag controleren of er een factuur gegenereerd moet worden. En dan als je maandelijks kiest dat hij het altijd op de 15e doet bijv.?
Tja, dat is natuurlijk een kwestie van je fantasie gebruiken, en volledig afhankelijk van je script en hetgeen je wilt doen. Ik heb een paar weken geleden nog een applicatie gemaakt waarbij op vaste tijdstippen diverse mailtjes naar leden verzonden moesten worden, volledig automatisch. Denk daarbij aan vaste tijdstippen als:

- Elke maandag om 11:35
- Elke woensdag om 17:00
- Elke vrijdag om 18:30
En dan nog een stuk of 20 van zulke tijdstippen.

Het is allemaal niet zo ingewikkeld. Je maakt gewoon een applicatie die elke x aantal minuten draait. In die applicatie kijk je wat de huidige tijd is (gewoon de tijd van uitvoering dus), en daaraan koppel je eventuele handelingen die op dat tijdstip moeten plaats vinden. Vaak houdt dat dan ook in dat je bij moet houden of iets al gebeurt is. Bijvoorbeeld: Je applicatie draait op maandag 1 januari 17:00 en daardoor wordt een factuur voor januari 2010 naar lid ID #1 verzonden. Dan zul je ergens bij moeten houden dat die factuur voor dat lid reeds verzonden is, zodat je applicatie die factuur niet de volgende keer wéér gaat versturen.

Je daadwerkelijke functionele code die je normaliter zou hebben (dus in geval van géén automatisme), blijft in de meeste gevallen ongewijzigd. Denk aan het daadwerkelijk genereren van een factuur PDF`je of DOC`je. Het is alleen de manier van aanroepen die in geval van een dergelijk geautomatiseerde applicatie anders is.
pi_76655938
Maare, niemand maakt hier dus dynamische PDFs in PHP?
pi_76657013
quote:
Op zondag 10 januari 2010 22:01 schreef Tuvai.net het volgende:
Maare, niemand maakt hier dus dynamische PDFs in PHP?
Jewel, met FPDF vanwege gebrek aan beter, dus ik kan je niet verder helpen Je kunt naar de PDF module van PHP zelf kijken (http://php.net/manual/en/book.pdf.php), maar ik zie niet 1,2,3 in hoe dat beter is als FPDF
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')