ole-datetime-naar-iso-time

Gesponsorde koppelingen

PHP script bestanden

  1. ole-datetime-naar-iso-time

« Lees de omschrijving en reacties

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
<?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);
?>


De omgekeerde functie
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
<?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;
}

?>

edit:
Na aanleiding van een opmerking van Jelmer in de reacties.
Het kan ook zonder explode en de floatval functie, namelijk zo:

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
<?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));
}

?>


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.

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
<?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 );
    }
}

?>

 
 

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.