ole-datetime-naar-iso-time
Gesponsorde koppelingen
PHP script bestanden
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$testdate = 40062.757639;
function ole_to_iso($ole)
{
//Knip datum op in aantal hele dagen en deel van dag
list($days,$daypart) = explode('.',$ole);
//bereken het aantal seconden per dag
$seconds_day = 60*60*24;
//bereken het aantal seconden dat erbij moet worden opgeteld
$seconds_plus = floatval('0.'.$daypart) * $seconds_day;
//Bepaal de nieuwe datum en geef deze terug
return date('Y-m-d H:i:s',mktime(0,0,0+$seconds_plus,12,30+$days,1899));
}
echo ole_to_iso($testdate);
?>
$testdate = 40062.757639;
function ole_to_iso($ole)
{
//Knip datum op in aantal hele dagen en deel van dag
list($days,$daypart) = explode('.',$ole);
//bereken het aantal seconden per dag
$seconds_day = 60*60*24;
//bereken het aantal seconden dat erbij moet worden opgeteld
$seconds_plus = floatval('0.'.$daypart) * $seconds_day;
//Bepaal de nieuwe datum en geef deze terug
return date('Y-m-d H:i:s',mktime(0,0,0+$seconds_plus,12,30+$days,1899));
}
echo ole_to_iso($testdate);
?>
De omgekeerde functie
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
function date_to_ole($input_date,$only_days = false){
//Het aantal dagen van ole naar de unix epoch datum
$days_from_ole_to_unix = 25569;
//Maak een timestamp van de unix epoch
$unix_timestamp = mktime(0,0,0,1,1,1970);
//Het totaal aantal seconden per dag
$seconds_day = 60*60*24;
//complete timestamp van de datum
$timestamp = strtotime($input_date);
//bepaal alleen het datum gedeelte van de meegegeven datum. Deze is nodig om het deel voor de . te berekenen
$date = date('Y-m-d',$timestamp);
//daar ook een timestamp van maken voor het rekenen
$date_timestamp = strtotime($date);
//bereken het aantal dagen tussen de opgevraagde datum en de unix epoch
$days_from_unix_to_date = ($date_timestamp - $unix_timestamp)/$seconds_day;
//bepaal het verschil in seconden (vanaf 00:00:00 de opgevraagde datum, tot de opgevraagde tijd op de opgevraagde datum)
$seconds = $timestamp - $date_timestamp;
//bepaal het gedeelte voor achter de komma
$floatvalue = round($seconds/$seconds_day,6);
//plak de delen bij elkaar
return $days_from_unix_to_date + $days_from_ole_to_unix + $floatvalue;
}
?>
function date_to_ole($input_date,$only_days = false){
//Het aantal dagen van ole naar de unix epoch datum
$days_from_ole_to_unix = 25569;
//Maak een timestamp van de unix epoch
$unix_timestamp = mktime(0,0,0,1,1,1970);
//Het totaal aantal seconden per dag
$seconds_day = 60*60*24;
//complete timestamp van de datum
$timestamp = strtotime($input_date);
//bepaal alleen het datum gedeelte van de meegegeven datum. Deze is nodig om het deel voor de . te berekenen
$date = date('Y-m-d',$timestamp);
//daar ook een timestamp van maken voor het rekenen
$date_timestamp = strtotime($date);
//bereken het aantal dagen tussen de opgevraagde datum en de unix epoch
$days_from_unix_to_date = ($date_timestamp - $unix_timestamp)/$seconds_day;
//bepaal het verschil in seconden (vanaf 00:00:00 de opgevraagde datum, tot de opgevraagde tijd op de opgevraagde datum)
$seconds = $timestamp - $date_timestamp;
//bepaal het gedeelte voor achter de komma
$floatvalue = round($seconds/$seconds_day,6);
//plak de delen bij elkaar
return $days_from_unix_to_date + $days_from_ole_to_unix + $floatvalue;
}
?>
edit:
Na aanleiding van een opmerking van Jelmer in de reacties.
Het kan ook zonder explode en de floatval functie, namelijk zo:
Het kan ook zonder explode en de floatval functie, namelijk zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function ole_to_iso($ole)
{
//Knip datum op in aantal hele dagen en deel van dag
$days = floor($ole);
$daypart = $ole - $days;
//bereken het aantal seconden per dag
$seconds_day = 60*60*24;
//bereken het aantal seconden dat erbij moet worden opgeteld
$seconds_plus = $daypart * $seconds_day;
//Bepaal de nieuwe datum en geef deze terug
return date('Y-m-d H:i:s',mktime(0,0,$seconds_plus,12,30 + $days,1899));
}
?>
function ole_to_iso($ole)
{
//Knip datum op in aantal hele dagen en deel van dag
$days = floor($ole);
$daypart = $ole - $days;
//bereken het aantal seconden per dag
$seconds_day = 60*60*24;
//bereken het aantal seconden dat erbij moet worden opgeteld
$seconds_plus = $daypart * $seconds_day;
//Bepaal de nieuwe datum en geef deze terug
return date('Y-m-d H:i:s',mktime(0,0,$seconds_plus,12,30 + $days,1899));
}
?>
edit:
Na aanleiding van een opmerking van ToySoldier in de reacties.
De functie aangepast, naar een versie waarbij je het datumformaat (php vorm) meegeeft in de functie.
Omdat het dan niet meer specifiek van ole_to_iso is, maar een datumopmaak zoals je zelf kiest, heb ik er ole_to_date van gemaakt.
De functie aangepast, naar een versie waarbij je het datumformaat (php vorm) meegeeft in de functie.
Omdat het dan niet meer specifiek van ole_to_iso is, maar een datumopmaak zoals je zelf kiest, heb ik er ole_to_date van gemaakt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
function ole_to_iso($ole, $format = 'Y-m-d H:i:s')
{
//Knip datum op in aantal hele dagen en deel van dag
$days = floor($ole);
$daypart = $ole - $days;
//bereken het aantal seconden per dag
$seconds_day = 60*60*24;
//bereken het aantal seconden dat erbij moet worden opgeteld
$seconds_plus = $daypart * $seconds_day;
//Bepaal de nieuwe datum en geef deze terug
$iTime = mktime(0,0,$seconds_plus,12,30 + $days,1899);
if ( $format === false )
{
return $iTime;
}
else
{
return date( $format, $iTime );
}
}
?>
function ole_to_iso($ole, $format = 'Y-m-d H:i:s')
{
//Knip datum op in aantal hele dagen en deel van dag
$days = floor($ole);
$daypart = $ole - $days;
//bereken het aantal seconden per dag
$seconds_day = 60*60*24;
//bereken het aantal seconden dat erbij moet worden opgeteld
$seconds_plus = $daypart * $seconds_day;
//Bepaal de nieuwe datum en geef deze terug
$iTime = mktime(0,0,$seconds_plus,12,30 + $days,1899);
if ( $format === false )
{
return $iTime;
}
else
{
return date( $format, $iTime );
}
}
?>