Klok in woorden

Door Daan Onbekend, 12 jaar geleden, 4.811x bekeken

Simpel script, dat de tijd in normale spreektaal weergeeft.

Gesponsorde koppelingen

PHP script bestanden

  1. klok-in-woorden

 

Er zijn 18 reacties op 'Klok in woorden'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Steen
steen
12 jaar geleden
 
0 +1 -0 -1
date('i') variable maken, nu moet je steeds die functie doen;) gaat sneller.
Daan Onbekend
Daan Onbekend
12 jaar geleden
 
0 +1 -0 -1
Je hebt gelijk, ik zal het even veranderen
- SanThe -
- SanThe -
12 jaar geleden
 
0 +1 -0 -1
Geing, maar inderdaad vaag doordat het per 5 minuten loopt.
Steen
steen
12 jaar geleden
 
0 +1 -0 -1
Je bent er nog drie vergeten, AND zou ik met kleine letters doen. Waarom vang je die 'per vijf minuten' niet op door een array met getallen te maken?
Daan Onbekend
Daan Onbekend
12 jaar geleden
 
0 +1 -0 -1
Wat bedoel je met 'per vijf minuten' ?
Michael -
Michael -
12 jaar geleden
 
0 +1 -0 -1
'per vijf minuten' omdat de klok per 5minuten loopt :P dus 5 over, 10 over, 15 over, 20 over, etc. steeds met 5minuten.
Wel grappig bedacht :)
Daan Onbekend
Daan Onbekend
12 jaar geleden
 
0 +1 -0 -1
Ik zou ook kunnen maken, dat hij bijvoorbeeld Dertien over zes zegt.

Maar zo zeg je dat niet, tegen iemand anders als hij vraagt hoe laat het is.

Vandaar.
Jaron T
Jaron T
12 jaar geleden
 
0 +1 -0 -1
Maar als het 8:01 is dan is het volgens jouw script al 8:15 ?
Robert Deiman
Robert Deiman
12 jaar geleden
 
0 +1 -0 -1
@Jaron
Bedoel je dat er een bug in het script zit? Hij werkt per 5 minuten, hoe er afgerond wordt weet ik niet (heb niet de hele code gelezen) dus het zou of:
8:00 of 8:05 zijn.
Remie
remie
12 jaar geleden
 
0 +1 -0 -1
Ik heb het script iets aangepast zodat het wat minder ifjes gebruikt :) en waarschijnlijk sneller is(NIET getest):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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';
}

?>
Roel -
Roel -
12 jaar geleden
 
0 +1 -0 -1
Persoonlijk zou ik voor switch() kiezen.
- Mark -
- Mark -
12 jaar geleden
 
0 +1 -0 -1
Mijn variant. Ik heb er direct een functie van gemaakt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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];


                }
            }
        }


?>


Voorbeeld voor gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

    echo klok_in_woorden(date('g'), date('i'));

?>
Chris Avontuur
Chris Avontuur
12 jaar geleden
 
0 +1 -0 -1
Misschien een leuke optie voor gevorderden: meertalig maken!
Verder ziet het er goed uit!
Remie
remie
12 jaar geleden
 
0 +1 -0 -1
Meertalig maken lijkt me natuurlijk niet heel erg moeilijk als je een array met data gebruikt gewoon de array met namen veranderen.
- Mark -
- Mark -
12 jaar geleden
 
0 +1 -0 -1
Het probleem is dat bijvoorbeeld de Engelse taal een andere opbouw heeft dan de Nederlandse taal, Het is mogelijk maar dat kost meer tijd dan ik op moment over heb. Alleen de $uren en $benamingen veranderen is niet de oplossing.
Gerard M
Gerard M
12 jaar geleden
 
0 +1 -0 -1
'Half 5' in het Engels betekend 5:30 en niet 4:30, dus idd een array met talen gaat niet op.
Mark L
Mark L
12 jaar geleden
 
0 +1 -0 -1
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
    }

?>
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


11 jaar geleden
 
0 +1 -0 -1
vergeet deze niet:
date_default_timezone_set('Europe/Amsterdam');

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. klok-in-woorden

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.