Time laten zien zoals op Facebook
Bij minder dan 1 minute "Zojuist" vervolgens 1 min 1uur 1 dag etc laten zien.
Op het moment krijg ik de tijd en datum te zien als "04-12-2014 23:36:50" ik vraag ze aan met $reply_date en $reply_time.
Iemand die weet hoe ik dit voor elkaar krijg of een bestaande script die dit doet ?
Code (php)
Zoiets als dit?
Als ik nu
echo datum("18:00:00 05-12-2014");
OF
echo datum("05-12-2014 18:00:00");
Krijg ik -358 minuten te zien
Gewijzigd op 05/12/2014 18:10:23 door Ronald brt
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
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
<?php
function datum($datetime, $maxdays = 13)
{
// huidige datum en tijd en het verschil tussen opgegeven datum en tijd berekenen
$now = new DateTime();
$interval = $datetime->diff($now);
// bereken wanneer de 'volgende dag' begint tov de opgegeven datum en tijd
$midnight = clone $datetime;
$midnight->setTime(0, 0);
$midnight->add(new DateInterval('P1D'));
// daarnaast berekenen we even de tijd zes uur later tov de opgegeven datum en tijd
$sixHrsLater = clone $datetime;
$sixHrsLater->add(new DateInterval('PT6H'));
// als de opgegeven tijd in de toekomst ligt geven we een foutmelding
if($datetime > $now)
return 'Error';
// als de tijd nu in dezelfde dag valt als de opgegeven tijd OF als het verschil minder is als zes uur
if($now < $midnight || $now < $sixHrsLater)
{
$hours = $interval->format('%h');
// indien minimaal 1 uur geleden
if($hours > 0)
return $hours . ' uur geleden';
$min = $interval->format('%i');
// indien minder dan een minuut geleden
if($min == 0)
return 'zojuist';
// indien minder dan twee minuten geleden
if($min == 1)
return '1 minuut geleden';
// indien twee of meer minuten geleden
return $min . ' minuten geleden';
}
$days = $interval->format('%a');
// gisteren
if($days == 1)
return 'gisteren';
// Minder dan de opgegeven maximale dagen geleden
if($days <= $maxdays)
return $days . ' dagen geleden';
// indien meer dan maximale opgegeven dagen dan gewoon de datum teruggeven
return $datetime->format('d-m-Y'); // 'd-m-Y H:i' om de tijd erbij te vermelden
}
// test
echo datum(new DateTime('05-12-2014 20:18:00')) . '<br>';
echo datum(new DateTime('04-12-2014')) . '<br>';
echo datum(new DateTime('22-11-2014')) . '<br>';
echo datum(new DateTime('10-11-2014')) . '<br>';
echo datum(new DateTime('03-11-2014')) . '<br>';
echo datum(new DateTime('03-11-2015')) . '<br>';
?>
function datum($datetime, $maxdays = 13)
{
// huidige datum en tijd en het verschil tussen opgegeven datum en tijd berekenen
$now = new DateTime();
$interval = $datetime->diff($now);
// bereken wanneer de 'volgende dag' begint tov de opgegeven datum en tijd
$midnight = clone $datetime;
$midnight->setTime(0, 0);
$midnight->add(new DateInterval('P1D'));
// daarnaast berekenen we even de tijd zes uur later tov de opgegeven datum en tijd
$sixHrsLater = clone $datetime;
$sixHrsLater->add(new DateInterval('PT6H'));
// als de opgegeven tijd in de toekomst ligt geven we een foutmelding
if($datetime > $now)
return 'Error';
// als de tijd nu in dezelfde dag valt als de opgegeven tijd OF als het verschil minder is als zes uur
if($now < $midnight || $now < $sixHrsLater)
{
$hours = $interval->format('%h');
// indien minimaal 1 uur geleden
if($hours > 0)
return $hours . ' uur geleden';
$min = $interval->format('%i');
// indien minder dan een minuut geleden
if($min == 0)
return 'zojuist';
// indien minder dan twee minuten geleden
if($min == 1)
return '1 minuut geleden';
// indien twee of meer minuten geleden
return $min . ' minuten geleden';
}
$days = $interval->format('%a');
// gisteren
if($days == 1)
return 'gisteren';
// Minder dan de opgegeven maximale dagen geleden
if($days <= $maxdays)
return $days . ' dagen geleden';
// indien meer dan maximale opgegeven dagen dan gewoon de datum teruggeven
return $datetime->format('d-m-Y'); // 'd-m-Y H:i' om de tijd erbij te vermelden
}
// test
echo datum(new DateTime('05-12-2014 20:18:00')) . '<br>';
echo datum(new DateTime('04-12-2014')) . '<br>';
echo datum(new DateTime('22-11-2014')) . '<br>';
echo datum(new DateTime('10-11-2014')) . '<br>';
echo datum(new DateTime('03-11-2014')) . '<br>';
echo datum(new DateTime('03-11-2015')) . '<br>';
?>
Ik heb alleen een probleem met;
Hier krijg ik error terug want ik wil het liefst op datum en tijd laten checken.
Of je server / computer staat niet op de juiste tijd ingesteld.
Gewijzigd op 05/12/2014 21:12:36 door Frank Nietbelangrijk
Nevermind na restarten van mn server werkt hij nu gewoon goed.
HEEL ERG BEDANKT VOOR DEZE FUNCTIE!!
Gewijzigd op 05/12/2014 21:16:52 door Ronald brt
Graag gedaan is de werking helder?
Zover ik heb kunnen zien is, laat secondes, minuten, uren, dagen, 1 dag verschil is laat gisteren zien, en volgens mij max 13 (te instellen) dagen laten zien anders datum laten zien ?
Daarnaast laat ie niet gelijk gisteren zien als je om 23:55 een bericht aanmaakt en het is nu 0:05. Dan laat ie gewoon zien dat het 10 minuten geleden is. Dit doet ie tot maximaal zes uur. Dan is het inmiddels wel de volgende ochtend en kunnen we gerust zeggen dat het gisteren was
Gewijzigd op 05/12/2014 21:34:21 door Frank Nietbelangrijk
toegevoegd. Zoals bij FB dan is het meer overzichtelijker qua tijd.
Ik ben echt blij met dit functie hehe, ik heb voor de gisteren output