Klok in woorden
Door Daan Onbekend, 18 jaar geleden, 7.342x bekeken
Simpel script, dat de tijd in normale spreektaal weergeeft.
Gesponsorde koppelingen
PHP script bestanden
Er zijn 18 reacties op 'Klok in woorden'
Gesponsorde koppelingen
Ik heb het script iets aangepast zodat het wat minder ifjes gebruikt :) en waarschijnlijk sneller is(NIET getest):
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
37
38
39
40
41
42
43
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
37
38
39
40
41
42
43
<?php
$dateg = date('g');
$datei = date('i');
$uren = array('','een','twee','drie','vier','vijf','zes','zeven','acht','negen','tien','elf','twaalf');
$tijden = array(
5 => 'vijf over ',
10 => 'tien over ',
15 => 'kwart over ',
20 => 'tien voor half ',
25 => 'vijf voor half ',
30 => 'half ',
35 => 'vijf over half ',
40 => 'tien over half ',
45 => 'kwart voor ',
50 => 'tien voor ',
55 => 'vijf voor '
);
$uur = $uren[$dateg];
$datei = floor( $datei / 5 + 0.000000005) * 5; // iets met php + floats wat niet altijd lekker gaaat
if($datei >= 20)
{
if($dateg == 12)
{
$dateg = 1;
}
else
{
$dateg++;
}
}
if(isset($tijden[$datei]))
{
$tijd = $tijden[$datei].$uur;
}
else
{
$tijd = $uur.' uur';
}
?>
$dateg = date('g');
$datei = date('i');
$uren = array('','een','twee','drie','vier','vijf','zes','zeven','acht','negen','tien','elf','twaalf');
$tijden = array(
5 => 'vijf over ',
10 => 'tien over ',
15 => 'kwart over ',
20 => 'tien voor half ',
25 => 'vijf voor half ',
30 => 'half ',
35 => 'vijf over half ',
40 => 'tien over half ',
45 => 'kwart voor ',
50 => 'tien voor ',
55 => 'vijf voor '
);
$uur = $uren[$dateg];
$datei = floor( $datei / 5 + 0.000000005) * 5; // iets met php + floats wat niet altijd lekker gaaat
if($datei >= 20)
{
if($dateg == 12)
{
$dateg = 1;
}
else
{
$dateg++;
}
}
if(isset($tijden[$datei]))
{
$tijd = $tijden[$datei].$uur;
}
else
{
$tijd = $uur.' uur';
}
?>
Mijn variant. Ik heb er direct een functie van gemaakt.
Voorbeeld voor gebruik:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
/*--------------------------------------------------------------------------------------------------------------------------
(?) Klok in woorden.
--------------------------------------------------------------------------------------------------------------------------*/
#| INFO: Functie voor het uitschrijven van een tijd, Voorbeeld: " 7:30 " omzetten naar " Half acht ".
function klok_in_woorden($uur, $minuten)
{
#| Controleren of " $uur " en " $minuten " digits zijn.
if(!is_numeric($uur) or !is_numeric($minuten))
{
return '(1) Ongeldige tijd.';
}
else
{
#| Controleren of " $uur " niet groter dan 12 is en " $minuten " niet groter dan 60 is.
if($uur > 12 or $minuten > 60)
{
return '(2) Ongeldige tijd.';
}
else
{
#| Uren vertalen.
$uren = array('een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen', 'tien', 'elf', 'twaalf', 'een');
#| Tijd benamingen.
$benamingen = array('uur', 'vijf over', 'tien over', 'kwart over', 'tien voor half', 'vijf voor half', 'half', 'vijf over half', 'tien over half', 'kwart voor', 'tien voor', 'vijf voor', 'uur');
#| " $uur " goed zetten voor als het later dan kwart over is.
$uur = ($minuten >= 18) ? $uur : ($uur - 1);
#| Tijd uitschrijven en resultaat terug geven.
return ($benamingen[floor(($minuten + 2)/5)] == 'uur') ? $uren[$uur].' '.$benamingen[floor(($minuten + 2)/5)] : $benamingen[floor(($minuten + 2)/5)].' '.$uren[$uur];
}
}
}
?>
/*--------------------------------------------------------------------------------------------------------------------------
(?) Klok in woorden.
--------------------------------------------------------------------------------------------------------------------------*/
#| INFO: Functie voor het uitschrijven van een tijd, Voorbeeld: " 7:30 " omzetten naar " Half acht ".
function klok_in_woorden($uur, $minuten)
{
#| Controleren of " $uur " en " $minuten " digits zijn.
if(!is_numeric($uur) or !is_numeric($minuten))
{
return '(1) Ongeldige tijd.';
}
else
{
#| Controleren of " $uur " niet groter dan 12 is en " $minuten " niet groter dan 60 is.
if($uur > 12 or $minuten > 60)
{
return '(2) Ongeldige tijd.';
}
else
{
#| Uren vertalen.
$uren = array('een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen', 'tien', 'elf', 'twaalf', 'een');
#| Tijd benamingen.
$benamingen = array('uur', 'vijf over', 'tien over', 'kwart over', 'tien voor half', 'vijf voor half', 'half', 'vijf over half', 'tien over half', 'kwart voor', 'tien voor', 'vijf voor', 'uur');
#| " $uur " goed zetten voor als het later dan kwart over is.
$uur = ($minuten >= 18) ? $uur : ($uur - 1);
#| Tijd uitschrijven en resultaat terug geven.
return ($benamingen[floor(($minuten + 2)/5)] == 'uur') ? $uren[$uur].' '.$benamingen[floor(($minuten + 2)/5)] : $benamingen[floor(($minuten + 2)/5)].' '.$uren[$uur];
}
}
}
?>
Voorbeeld voor gebruik:
Ik heb er zelf ook één gemaakt. Alleen na het lezen over meertaligheid heb ik hem iets aangepast. Hij is wel een stuk groter en complexer geworden, maar de functie is nu in het nederlands, engels en frans. Alle andere talen moeten ook kunnen. Het is relatief simpel een nieuwe taal aan te brengen, er staat - vind ik - een behoorlijk uitgebreide uitleg bij.
Je kunt er alleen geen functie van maken waar de uren van 0 tm 23 gaan. Echt alleen 1 tm 12.
Je kunt er alleen geen functie van maken waar de uren van 0 tm 23 gaan. Echt alleen 1 tm 12.
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php
function minmax ($getal, $min, $max) {
$getal -= $min;
$floor = floor($getal/$max);
$getal -= ($floor*$max);
$getal += $min;
return $getal;
}
// $stap staat voor de hoeveelheid getallen tussen de minuut, bij 5 is het: heel, 5 over -, 10 over -. Bij 1 is het: heel, 1 over -, 2 over -, 3 over - etc.
function datetext ($uur, $minuut, $stap = 5, $lang = 'nl') {
// Hier de zie je de verschillende talen.
// nl, en & fr zijn de talen (nederlands, engels en frans)
// bij 'num' zie je de benodigde getallen. In het Nederlands hoef je alleen 1 tm 15 te weten, bij Frans en Engels 1 tm 29, want hier gebruik je geen 'voor half'
// bij 'text' staat de text als 'over half' en 'voor'
// bij display staat hoe alles weergegeven moet worden:
// * %uur% en %minuut% worden vervangen door het uur-getal en minuut-getal in text!!!
// * %text% word vervangen door dingen als 'half' en 'over half'
// * %uurnum% en %minnum% worden vervangen door uur-getal en minuut-getal in cijfers
// * Tekst tussen () kun je extra taal-functionaliteit zetten:
// - Het bestaat uit twee gedeelten, voor de komma en na de komma.
// - In het eerste gedeelte staat een getal, zoals %uurnum% en %minnum%.
// - Het tweede gedeelte bestaat uit cijfer=text: Als het getal uit het eerste gedeelte kleiner of gelijk aan het cijfer aan het tweede gedeelte is, dan word dit stuk vervangen door het stukje text.
// - Je kunt bij het tweede gedeelte meerdere stukjes neerzetten, door middel val een |
// vb: (%uurnum%,1=heure|12=heures) Als %uurnum% 3 is, output hij heures, is %uurnum% 1, dan word het heure
// * reverse is nodig om te bepalen na welk getal er andersom getelt word:
// vb: 3:01 = 1 over 3. 3:29 = 1 voor half 4, tussen 15 en 30 & 45 en 60 moet er afgeteld worden.
static $numbers = array(
'nl' => array(
'num' => array('', 'een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen', 'tien', 'elf', 'twaalf', 'dertien', 'veertien', 'kwart'),
'text' => array(0 => '', 15 => 'over', 29 => 'voor half', 30 => 'half', 44 => 'over half', 60 => 'voor'),
'display' => '%minuut% %text% %uur% (%minnum%,0=uur)',
'reverse' => 15
),
'en' => array(
'num' => array('', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'a quarter', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', 'twenty-one', 'twenty-two', 'twenty-three', 'twenty-four', 'twenty-five', 'twenty-six', 'twenty-seven', 'twenty-eight', 'twenty-nine'),
'text' => array(0 => '', 29 => 'past', 30 => 'half past', 60 => 'to'),
'display' => '%minuut% %text% %uur% (%minnum%,0=o\'clock)',
'reverse' => 30
),
'fr' => array(
'num' => array('', 'une', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf', 'dix', 'onze', 'douze', 'treize', 'quatorze', '(%minnum%,30=et quart|60=le quart)', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf', 'vingt', 'vingt-en-un', 'vingt-deux', 'vingt-trois', 'vingt-quatre', 'vingt-cinq', 'vingt-six', 'vingt-sept', 'vingt-huit', 'vingt-neuf'),
'text' => array(0 => '', 29 => '', 30 => 'et demie', 60 => 'moins'),
'display' => '%uur% (%uurnum%,1=heure|12=heures) %text% %minuut%',
'reverse' => 30
));
// minuut verifiëren, dat het tussen 0 en 59 zit.
$minuut = round($minuut/$stap)*$stap;
$uur += floor($minuut/60);
$minuut = minmax($minuut, 0, 60);
$minuut2 = $minuut;
$display = $numbers[$lang]['display'];
if ($minuut > $numbers[$lang]['reverse']) {
$uur++;
$minuut2 = $minuut/$numbers[$lang]['reverse'];
$floor = floor($minuut2);
$minuut2 = round(($minuut2-$floor)*$numbers[$lang]['reverse']);
// minuut 'reversen'
if ($floor%2 == 1) {
$minuut2 = abs($minuut2-$numbers[$lang]['reverse']);
}
}
// uur verifiëren, tussen 1 en 12.
$uur = minmax($uur, 1, 12);
foreach ($numbers[$lang]['text'] as $time => $value) {
if ($minuut <= $time) {
// Als minuut kleiner of gelijk is aan de opgegeven parameter in 'text', dan word %minuut%, %text% en %minnum% veranderd
$display = preg_replace('#%minuut%#', $numbers[$lang]['num'][$minuut2], $display);
$display = preg_replace('#%text%#', $value, $display);
$display = preg_replace('#%minnum%#', $minuut, $display);
break;
}
}
// hier veranderd %uur% en %uurnum%
$display = preg_replace('#%uur%#', $numbers[$lang]['num'][$uur], $display);
$display = preg_replace('#%uurnum%#', $uur, $display);
// hier word de functie tussen de () uitgevoerd
while (preg_match('#\(([0-9]+),(.*?)\)#', $display, $match)) {
$ray = explode('|', $match[2]);
$change = '';
foreach ($ray as $value) {
preg_match('#^([0-9]+)=(.*?)$#', $value, $get);
if (intval($match[1]) <= intval($get[1])) {
$change = trim($get[2]);
break;
}
}
$display = preg_replace('#\(([0-9]+),(.*?)\)#', $change, $display, 1);
}
// hier worden de niet veranderde gegevens tussen %-tekens verwijderd.
$display = preg_replace('#%(.*?)%#', '', $display);
return $display;
}
?>
function minmax ($getal, $min, $max) {
$getal -= $min;
$floor = floor($getal/$max);
$getal -= ($floor*$max);
$getal += $min;
return $getal;
}
// $stap staat voor de hoeveelheid getallen tussen de minuut, bij 5 is het: heel, 5 over -, 10 over -. Bij 1 is het: heel, 1 over -, 2 over -, 3 over - etc.
function datetext ($uur, $minuut, $stap = 5, $lang = 'nl') {
// Hier de zie je de verschillende talen.
// nl, en & fr zijn de talen (nederlands, engels en frans)
// bij 'num' zie je de benodigde getallen. In het Nederlands hoef je alleen 1 tm 15 te weten, bij Frans en Engels 1 tm 29, want hier gebruik je geen 'voor half'
// bij 'text' staat de text als 'over half' en 'voor'
// bij display staat hoe alles weergegeven moet worden:
// * %uur% en %minuut% worden vervangen door het uur-getal en minuut-getal in text!!!
// * %text% word vervangen door dingen als 'half' en 'over half'
// * %uurnum% en %minnum% worden vervangen door uur-getal en minuut-getal in cijfers
// * Tekst tussen () kun je extra taal-functionaliteit zetten:
// - Het bestaat uit twee gedeelten, voor de komma en na de komma.
// - In het eerste gedeelte staat een getal, zoals %uurnum% en %minnum%.
// - Het tweede gedeelte bestaat uit cijfer=text: Als het getal uit het eerste gedeelte kleiner of gelijk aan het cijfer aan het tweede gedeelte is, dan word dit stuk vervangen door het stukje text.
// - Je kunt bij het tweede gedeelte meerdere stukjes neerzetten, door middel val een |
// vb: (%uurnum%,1=heure|12=heures) Als %uurnum% 3 is, output hij heures, is %uurnum% 1, dan word het heure
// * reverse is nodig om te bepalen na welk getal er andersom getelt word:
// vb: 3:01 = 1 over 3. 3:29 = 1 voor half 4, tussen 15 en 30 & 45 en 60 moet er afgeteld worden.
static $numbers = array(
'nl' => array(
'num' => array('', 'een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen', 'tien', 'elf', 'twaalf', 'dertien', 'veertien', 'kwart'),
'text' => array(0 => '', 15 => 'over', 29 => 'voor half', 30 => 'half', 44 => 'over half', 60 => 'voor'),
'display' => '%minuut% %text% %uur% (%minnum%,0=uur)',
'reverse' => 15
),
'en' => array(
'num' => array('', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'a quarter', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', 'twenty-one', 'twenty-two', 'twenty-three', 'twenty-four', 'twenty-five', 'twenty-six', 'twenty-seven', 'twenty-eight', 'twenty-nine'),
'text' => array(0 => '', 29 => 'past', 30 => 'half past', 60 => 'to'),
'display' => '%minuut% %text% %uur% (%minnum%,0=o\'clock)',
'reverse' => 30
),
'fr' => array(
'num' => array('', 'une', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf', 'dix', 'onze', 'douze', 'treize', 'quatorze', '(%minnum%,30=et quart|60=le quart)', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf', 'vingt', 'vingt-en-un', 'vingt-deux', 'vingt-trois', 'vingt-quatre', 'vingt-cinq', 'vingt-six', 'vingt-sept', 'vingt-huit', 'vingt-neuf'),
'text' => array(0 => '', 29 => '', 30 => 'et demie', 60 => 'moins'),
'display' => '%uur% (%uurnum%,1=heure|12=heures) %text% %minuut%',
'reverse' => 30
));
// minuut verifiëren, dat het tussen 0 en 59 zit.
$minuut = round($minuut/$stap)*$stap;
$uur += floor($minuut/60);
$minuut = minmax($minuut, 0, 60);
$minuut2 = $minuut;
$display = $numbers[$lang]['display'];
if ($minuut > $numbers[$lang]['reverse']) {
$uur++;
$minuut2 = $minuut/$numbers[$lang]['reverse'];
$floor = floor($minuut2);
$minuut2 = round(($minuut2-$floor)*$numbers[$lang]['reverse']);
// minuut 'reversen'
if ($floor%2 == 1) {
$minuut2 = abs($minuut2-$numbers[$lang]['reverse']);
}
}
// uur verifiëren, tussen 1 en 12.
$uur = minmax($uur, 1, 12);
foreach ($numbers[$lang]['text'] as $time => $value) {
if ($minuut <= $time) {
// Als minuut kleiner of gelijk is aan de opgegeven parameter in 'text', dan word %minuut%, %text% en %minnum% veranderd
$display = preg_replace('#%minuut%#', $numbers[$lang]['num'][$minuut2], $display);
$display = preg_replace('#%text%#', $value, $display);
$display = preg_replace('#%minnum%#', $minuut, $display);
break;
}
}
// hier veranderd %uur% en %uurnum%
$display = preg_replace('#%uur%#', $numbers[$lang]['num'][$uur], $display);
$display = preg_replace('#%uurnum%#', $uur, $display);
// hier word de functie tussen de () uitgevoerd
while (preg_match('#\(([0-9]+),(.*?)\)#', $display, $match)) {
$ray = explode('|', $match[2]);
$change = '';
foreach ($ray as $value) {
preg_match('#^([0-9]+)=(.*?)$#', $value, $get);
if (intval($match[1]) <= intval($get[1])) {
$change = trim($get[2]);
break;
}
}
$display = preg_replace('#\(([0-9]+),(.*?)\)#', $change, $display, 1);
}
// hier worden de niet veranderde gegevens tussen %-tekens verwijderd.
$display = preg_replace('#%(.*?)%#', '', $display);
return $display;
}
?>
Om te reageren heb je een account nodig en je moet ingelogd zijn.
Inhoudsopgave
Labels
- Geen tags toegevoegd.
PHP hulp
0 seconden vanaf nu