Leesbare datum

Gepost door Sjaak Ringens op 09-11-2010 15:29.

Met deze functie krijg je een makkelijke, geschatte, tijd terug.

Met deze functie maak je je forum of blog of wat dan ook wat leesbaarder omdat je niet met een datum van het 'jaar tot en met de seconde' werkt, maar met een afgeronde datum.

Geen idee of het echt goed genoeg is voor de library, maar ik vond het wel een grappig functie :)

Bij de voorbeelden staat hoe je het kunt gebruiken, de functie kan met 1 parameter omgaan. Dan vergelijkt hij de datum met vandaag. Als je 2 parameters opgeeft, dan vergelijkt hij deze 2 data.

Bestanden van dit script

readable_date.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
<?php
/***
* Requires PHP 5.3.0 or higher
*
* @param DateTime $poDate The date to calculate the difference from.
* @param DateTime $poDate2 The 2nd date if you want to calculate the difference from these two dates.
* @returns String The difference between the given dates or now.
*/
function readable_date( DateTime $poDate, DateTime $poDate2 = null )
{
    $oInterval = $poDate->diff( ( null != $poDate2 ) ? $poDate2 : new DateTime( ) );
    
    if( $oInterval->y > 1 )
        return $oInterval->format( '%y jaar geleden' );
    elseif( $oInterval->y == 1 )
        return 'vorig jaar';

    if( $oInterval->m > 1 )
        return $oInterval->format( '%m maanden geleden' );
    elseif( $oInterval->m == 1 )
        return 'vorige maand';
        
    if( $oInterval->d > 2 )
        return $oInterval->format( '%d dagen geleden' );
    elseif( $oInterval->d == 2 )
        return 'eergisteren';
    elseif( $oInterval->d == 1 )
        return 'gisteren';
        
    if( $oInterval->h > 1 )
        return $oInterval->format( '%h uur geleden' );

    return 'zonet';        
}

/** Test **/
$now = new DateTime( '2010-11-09 15:13:44' ); // Om de voorbeelden te laten kloppen!
$dates = array(
        new DateTime( '2007-11-01 12:37:33' )
    ,    new DateTime( '2009-11-04 12:37:33' )
    ,    new DateTime( '2010-05-03 12:37:33' )
    ,    new DateTime( '2010-10-06 12:37:33' )
    ,    new DateTime( '2010-11-07 12:37:33' )
    ,    new DateTime( '2010-11-08 12:37:33' )
    ,    new DateTime( '2010-11-09 12:37:33' )
    ,    new DateTime( '2010-11-09 15:10:33' )
);

foreach( $dates as $date )
    echo readable_date( $date, $now ) . PHP_EOL;
// Output:
// 3 jaar geleden
// vorig jaar
// 6 maanden geleden
// vorige maand
// eergisteren
// gisteren
// 2 uur geleden
// zonet
/** /Test **/
?>

Commentaar

09-11-2010 17:04

09-11-2010 19:37

Beetje vreemde titel voor dit script. Zoook, vind ik de naam van de functie niet echt passend bij wat je terugkrijgt.

09-11-2010 20:53

Ik wist geen andere naam te bedenken.. mocht je deze weten mag je hem natuurlijk naar voren schieten. :)

Ik zou graag mijn script aanpassen aangezien er toch nog wel wat verbetert kan worden, maar volgens mij is er nog altijd geen 'bewerk script'-knopje?

10-11-2010 10:20

Dit zou meer iets zijn voor een Wiki niet echt een script.
Overigens kan je met International support ook nog wat leuke dingen doen. ;) voorin in combinatie met.

Inloggen wachtwoord vergeten? Aanmelden