Maanden tellen
Mensen,
Ik ben een script aan het maken die maandelijks gerunned word.
Hij moet kijken welke maand het is als het script word gerunned en dan moet die in de database kijken hoeveel personen er zijn aangemeld de vorige maand.
heb het zo in de database staan: 06-2011 bijv.
Hoe krijg ik het voor elkaar dat ik kan zien welke maand hiervoor kwam? 05-2011 dus.
Tevens ook hoe ik het probleem oplos met andere jaren dus als het 01-2012 is dat die ziet dat 12-2011 een vorige maand was.
ik dacht aan zoiets maar dan krijg ik een - getal
Hoe kan ik dit het beste oplossen?
Ik ben een script aan het maken die maandelijks gerunned word.
Hij moet kijken welke maand het is als het script word gerunned en dan moet die in de database kijken hoeveel personen er zijn aangemeld de vorige maand.
heb het zo in de database staan: 06-2011 bijv.
Hoe krijg ik het voor elkaar dat ik kan zien welke maand hiervoor kwam? 05-2011 dus.
Tevens ook hoe ik het probleem oplos met andere jaren dus als het 01-2012 is dat die ziet dat 12-2011 een vorige maand was.
ik dacht aan zoiets maar dan krijg ik een - getal
Code (php)
1
2
3
4
5
2
3
4
5
<?php $datumoud = "12-2010";
$datumnu = date("m-Y");
$Datumgoed = $datumnu - $datumoud; ?>
$datumnu = date("m-Y");
$Datumgoed = $datumnu - $datumoud; ?>
Hoe kan ik dit het beste oplossen?
Misschien niet de meest ideale oplossing, maar toch ^^
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$datumnu = strftime("%Y-%m", time());
$datum_min_maand = strftime("%Y-%m", strtotime($datumnu.'- 1 month'));
//datum opsplitsen en dan in de goede volgorde terugzetten
if(preg_match('/^([0-9]{4})(\-{1})([0-9]{2})$/', $datum_min_maand, $matches) ) {
$Datumgoed = $matches[3].$matches[2].$matches[1];
}
?>
$datumnu = strftime("%Y-%m", time());
$datum_min_maand = strftime("%Y-%m", strtotime($datumnu.'- 1 month'));
//datum opsplitsen en dan in de goede volgorde terugzetten
if(preg_match('/^([0-9]{4})(\-{1})([0-9]{2})$/', $datum_min_maand, $matches) ) {
$Datumgoed = $matches[3].$matches[2].$matches[1];
}
?>
Gewijzigd op 30/06/2011 13:42:40 door Tim S
Gebruik je wel het juiste veld in je db? (=datetime?)
Jasper, dat is niet verplicht. SQL kan ook prima zonder de datetime tabel.
een datum hoort volgens mij nog altijd in een veld dat datum ondersteund. Logisch zou zijn een datetime of een date veld.
Gewijzigd op 30/06/2011 13:54:42 door Jasper DS
@dennis Als je wilt weten hoeveel leden je er vorige maand bij hebt gehad kun je toch ook gewoon in SQL een count doen en dan bij de WHERE een maand en jaar invullen?
Jasper, ik gebruik eigenlijk nooit een Date veld in de SQL (phpMyAdmin). Datum en tijd heb ik altijd in een VARCHAR staan.
@Dennis Zoals Maikels zegt. Je kunt gewoon via SQL uitrekenen hoeveel leden er de vorige maand zijn bijgekomen.
@Dennis Zoals Maikels zegt. Je kunt gewoon via SQL uitrekenen hoeveel leden er de vorige maand zijn bijgekomen.
@hierboven, volgens mij is dat echt fout fout fout, want dan kan je niet gebruik maken van de DATE() functie in SQL en er zullen nog wel nadelen zijn!
Jasper, ik kan prima gebruik maken van de DATE() functie. En het onderstaande werkt ook prima.
Gewijzigd op 30/06/2011 14:19:42 door PHP Scripter
ik kan het ook via een query doen maar moet het van de vorige maand hebbeen dus moet zowieso uitrekenen wat de vorige maand is en eventueel jaar.
Via sql lijkt mij het makkelijkste erna.
Via sql lijkt mij het makkelijkste erna.
Ok ik heb het voor elkaar gekregen op deze manier
Alleen nu moet ik nog weten hoe ik een x aantal jaren terug dezelfde maand ook kan zien.
Dus nu is het 04-2011 alleen het programma moet ook kijken of die klant er misschien 04-2010 ook al in stond of 04-2009.
kan iemand mij vertellen hoe ik dit kan doen?
Groeten
Code (php)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$datumnu = strftime("%Y-%m", time());
$datum_min_maand = strftime("%Y-%m", strtotime($datumnu.'- 1 month'));
if(preg_match('/^([0-9]{4})(\-{1})([0-9]{2})$/', $datum_min_maand, $matches) ) {
$Datumgoed = $matches[3].$matches[2].$matches[1];
$Een = 0;
$q_Klanten = mysql_query("SELECT * FROM klanten WHERE aanmelddatum = '".$Datumgoed."'");
while($Klanten = mysql_fetch_object($q_Klanten))
{
$q_Domeinen = mysql_query("SELECT * FROM domeinnamen
WHERE id_klant = '".$Klanten->klant_id."'
AND toegevoegd_op = '".$Datumgoed."'");
$Aantal_Domein = mysql_num_rows($q_Domeinen);
$Commissie = 29 + $Aantal_Domein;
$Een = $Een + $Commissie;
}
}
?>
$datum_min_maand = strftime("%Y-%m", strtotime($datumnu.'- 1 month'));
if(preg_match('/^([0-9]{4})(\-{1})([0-9]{2})$/', $datum_min_maand, $matches) ) {
$Datumgoed = $matches[3].$matches[2].$matches[1];
$Een = 0;
$q_Klanten = mysql_query("SELECT * FROM klanten WHERE aanmelddatum = '".$Datumgoed."'");
while($Klanten = mysql_fetch_object($q_Klanten))
{
$q_Domeinen = mysql_query("SELECT * FROM domeinnamen
WHERE id_klant = '".$Klanten->klant_id."'
AND toegevoegd_op = '".$Datumgoed."'");
$Aantal_Domein = mysql_num_rows($q_Domeinen);
$Commissie = 29 + $Aantal_Domein;
$Een = $Een + $Commissie;
}
}
?>
Alleen nu moet ik nog weten hoe ik een x aantal jaren terug dezelfde maand ook kan zien.
Dus nu is het 04-2011 alleen het programma moet ook kijken of die klant er misschien 04-2010 ook al in stond of 04-2009.
kan iemand mij vertellen hoe ik dit kan doen?
Groeten
ARG varchar voor datums slaat nergens op!
@ Karl Karl,
Heb gedaan wat Tim S zei. Weet jij een betere oplossing voor alles dan?:$
Heb gedaan wat Tim S zei. Weet jij een betere oplossing voor alles dan?:$
Stap 1: Zorgen dat je de juiste
Stap 2: Query voor het opvragen van aanmeldingen van afgelopen maand:
SELECT
*
FROM
klanten
WHERE aanmelddatum < now() AND aanmelddatum > ( now() - INTERVAL 1 MONTH)
@PHP Scripter, dat je de data sloopt met een varchar voor een datum is leuk, als je server instelling aangepast worden werkt het niet meer.
Stap 2: Query voor het opvragen van aanmeldingen van afgelopen maand:
SELECT
*
FROM
klanten
WHERE aanmelddatum < now() AND aanmelddatum > ( now() - INTERVAL 1 MONTH)
@PHP Scripter, dat je de data sloopt met een varchar voor een datum is leuk, als je server instelling aangepast worden werkt het niet meer.
zoiets?
Datum als datum opslaan in de database.
Datum en tijd functies van de database gebruiken.
Datum en tijd functies van de database gebruiken.




