Uitgerekende datum berekenen zwangerschap
Ik ben voor een project opzoek naar een scriptje dat de uitgerekende datum kan berekenen van een zwangerschap.
Weet iemand of heet iemand zoiets als dit liggen?
Voorbeeld: https://www.24baby.nl/zwanger/ben-ik-zwanger/uitgerekende-datum-berekenen/
https://www.babyopkomst.nl/article/uitgerekende-datum/
Op de pagina staat een link naar een popup calculator.
Als je die apart laadt, staat in de code een javascript dat alles uitrekent. :
https://www.babyopkomst.nl/tools/due-date-calculator/#popup
Gewijzigd op 25/11/2019 13:18:53 door Adoptive Solution
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
26
27
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 if(!empty($_POST['calculator_ok'])):
//last cycle date
$date="$_POST[dateyear]-$_POST[datemonth]-$_POST[dateday]";
//convert to time
$lasttime=mktime(0,0,0,$_POST['datemonth'],$_POST['dateday'],$_POST['dateyear']);
// next period start
$next_period=$lasttime + $_POST['days']*24*3600;
$next_period=date("F d, Y",$next_period);
//first fertile day
$firstdaytime=$lasttime + $_POST['days']*24*3600 - 16*24*3600;
$firstday=date("F d, Y",$firstdaytime);
//last fertile day
$lastdaytime=$lasttime + $_POST['days']*24*3600 - 12*24*3600;
$lastday=date("F d, Y",$lastdaytime);
//have to adjust due date?
$diff=$_POST['days'] - 28;
//due date $date + 280 days
$duedatetime=$lasttime + 280*24*3600 + $diff*24*3600;
$duedate=date("F d, Y",$duedatetime);
?>
//last cycle date
$date="$_POST[dateyear]-$_POST[datemonth]-$_POST[dateday]";
//convert to time
$lasttime=mktime(0,0,0,$_POST['datemonth'],$_POST['dateday'],$_POST['dateyear']);
// next period start
$next_period=$lasttime + $_POST['days']*24*3600;
$next_period=date("F d, Y",$next_period);
//first fertile day
$firstdaytime=$lasttime + $_POST['days']*24*3600 - 16*24*3600;
$firstday=date("F d, Y",$firstdaytime);
//last fertile day
$lastdaytime=$lasttime + $_POST['days']*24*3600 - 12*24*3600;
$lastday=date("F d, Y",$lastdaytime);
//have to adjust due date?
$diff=$_POST['days'] - 28;
//due date $date + 280 days
$duedatetime=$lasttime + 280*24*3600 + $diff*24*3600;
$duedate=date("F d, Y",$duedatetime);
?>
Heb inmiddels dit nu maar wanneer ik doormiddel van locale tijd NL zet etc en ik doe alles veranderen naar strftime en vervang de F door %B dan krijg ik alsnog geen Nederlandse data
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
// Voor in de query's
$db->query("SET lc_time_names = 'NL_nl'");
// voor strftime()
setlocale(LC_ALL, 'nl_NL','nl', 'du', 'dutch');
?>
// Voor in de query's
$db->query("SET lc_time_names = 'NL_nl'");
// voor strftime()
setlocale(LC_ALL, 'nl_NL','nl', 'du', 'dutch');
?>
Die berg aan waardes in setlocale() heeft te maken met XAMPP op mijn PC die weer wat anders wilt dan op Linux.
Met date() kan je overigens geen locales gebruiken.
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
26
27
28
29
30
31
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
28
29
30
31
<?php if(!empty($_POST['calculator_ok'])):
// voor strftime()
setlocale(LC_ALL, 'nl_NL','nl', 'du', 'dutch');
//last cycle date
$date="$_POST[dateyear]-$_POST[datemonth]-$_POST[dateday]";
//convert to time
$lasttime=mktime(0,0,0,$_POST['datemonth'],$_POST['dateday'],$_POST['dateyear']);
// next period start
$next_period=$lasttime + $_POST['days']*24*3600;
$next_period=strftime("%B %d, %Y",$next_period);
//first fertile day
$firstdaytime=$lasttime + $_POST['days']*24*3600 - 16*24*3600;
$firstday=strftime("%B %d, %Y",$firstdaytime);
//last fertile day
$lastdaytime=$lasttime + $_POST['days']*24*3600 - 12*24*3600;
$lastday=strftime("%B %d, %Y",$lastdaytime);
//have to adjust due date?
$diff=$_POST['days'] - 28;
//due date $date + 280 days
$duedatetime=$lasttime + 280*24*3600 + $diff*24*3600;
$duedate=strftime("%B %d, %Y",$duedatetime);
?>
// voor strftime()
setlocale(LC_ALL, 'nl_NL','nl', 'du', 'dutch');
//last cycle date
$date="$_POST[dateyear]-$_POST[datemonth]-$_POST[dateday]";
//convert to time
$lasttime=mktime(0,0,0,$_POST['datemonth'],$_POST['dateday'],$_POST['dateyear']);
// next period start
$next_period=$lasttime + $_POST['days']*24*3600;
$next_period=strftime("%B %d, %Y",$next_period);
//first fertile day
$firstdaytime=$lasttime + $_POST['days']*24*3600 - 16*24*3600;
$firstday=strftime("%B %d, %Y",$firstdaytime);
//last fertile day
$lastdaytime=$lasttime + $_POST['days']*24*3600 - 12*24*3600;
$lastday=strftime("%B %d, %Y",$lastdaytime);
//have to adjust due date?
$diff=$_POST['days'] - 28;
//due date $date + 280 days
$duedatetime=$lasttime + 280*24*3600 + $diff*24*3600;
$duedate=strftime("%B %d, %Y",$duedatetime);
?>
Werkt geweldig!
Code (php)
1
2
3
2
3
<?php // kleurtjes
$date=$_POST['dateyear']."-".$_POST['datemonth']."-".$_POST['dateday'];
?>
$date=$_POST['dateyear']."-".$_POST['datemonth']."-".$_POST['dateday'];
?>
Zo voorkom je notices over verwachtte constanten. Daarom: Variabelen altijd buiten quotes.
Waarom maak je geen gebruik van de DateTime classes? Lijkt mij een stuk makkelijker dan het bovenstaande. Je hebt ook een DateInterval class waarmee je vaste perioden bij een datum kunt optellen.
Dan hoef je niet alles via secondes om te rekenen.
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
26
27
28
29
30
31
32
33
34
35
36
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
28
29
30
31
32
33
34
35
36
<?php
if(!empty($_POST['calculator_ok'])):
// voor strftime()
setlocale(LC_ALL, 'nl_NL', 'nl', 'du', 'dutch');
//last cycle date
$lastdate = new DateTime($_POST[dateyear] . '-' . $_POST[datemonth] . '-' . $_POST[dateday]);
// next period start
$next_period = clone $lastdate;
$next_period->modify('+' . $_POST['days'] . 'days');
$firstdaytime = clone $lastdate;
$lastdaytime = clone $lastdate;
$verschil = $_POST['days'] - 16;
$firstdatytime->modify('+' . $verschil . 'days');
$verschil2 = $_POST['days'] - 12;
$lastdaytime->modify('+' . $verschil2 . 'days');
//have to adjust due date?
$diff = $_POST['days'] - 28;
$duedatetime = clone $lastdate;
$duur = 280 + $diff;
$duedatetime->modify('+' . $duur . 'days');
echo $duedatetime->format('d M Y');
endif;
?>
if(!empty($_POST['calculator_ok'])):
// voor strftime()
setlocale(LC_ALL, 'nl_NL', 'nl', 'du', 'dutch');
//last cycle date
$lastdate = new DateTime($_POST[dateyear] . '-' . $_POST[datemonth] . '-' . $_POST[dateday]);
// next period start
$next_period = clone $lastdate;
$next_period->modify('+' . $_POST['days'] . 'days');
$firstdaytime = clone $lastdate;
$lastdaytime = clone $lastdate;
$verschil = $_POST['days'] - 16;
$firstdatytime->modify('+' . $verschil . 'days');
$verschil2 = $_POST['days'] - 12;
$lastdaytime->modify('+' . $verschil2 . 'days');
//have to adjust due date?
$diff = $_POST['days'] - 28;
$duedatetime = clone $lastdate;
$duur = 280 + $diff;
$duedatetime->modify('+' . $duur . 'days');
echo $duedatetime->format('d M Y');
endif;
?>