Skip to content

Instantly share code, notes, and snippets.

@Leboubou111
Last active November 17, 2020 12:28
Show Gist options
  • Save Leboubou111/462728d1a73c7f9525069499cc55d06a to your computer and use it in GitHub Desktop.
Save Leboubou111/462728d1a73c7f9525069499cc55d06a to your computer and use it in GitHub Desktop.
<?php
$event_start_date_formated = DateTime::createFromFormat('d/m/Y H:i', '18/11/2020 19:15');
if ($event_start_date_formated->format('d/m/Y') == date('d/m/Y', strtotime('yesterday'))) {
$show_event_start_date = 'Demain à '.strftime("%kh%M", strtotime($event_start_date_formated->format('H:i')));
<script type="text/javascript">
console.log('Jour = 1');
</script>
} else if ($event_start_date_formated->format('d/m/Y') == date('d/m/Y')) {
$dif_time = strtotime($event_start_date_formated->format('d/m/Y H:i')) - strtotime(date('d/m/Y H:i'));
$time_to_show = $event_start_date_formated->format('d/m/Y H:i');
if (date('H', ($dif_time - 3600)) > '0') {
<script type="text/javascript">
console.log('Jour = 0 et Heure < 1');
</script>
} else {
if (date('i', ($dif_time - 3600)) < '16') {
<script type="text/javascript">
console.log('Jour = 0 et Heure < 1 et minutes < 16');
</script>
}
<script type="text/javascript">
console.log('Jour = 0 et Heure >= 1');
</script>
}
} else {
$show_event_start_date = strftime("%a %e %b %kh%M", strtotime($event_start_date_formated->format('Y/m/d H:i')));
<script type="text/javascript">
console.log('Jour > 1');
</script>
}
?>
@Leboubou111
Copy link
Author

Leboubou111 commented Nov 17, 2020

J'ai fixé 18/11/2020 19:15 dans l'objet DateTime, mais je vais le chercher sur une option de 'Options framework'
Mais : $dif_time me sort 0 et $time_to_show vide

@cleclech
Copy link

Un truc dans le genre ?

// Init
$event_start_date_formated = DateTime::createFromFormat( 'd/m/Y H:i', '18/11/2020 19:15' );
$now = new DateTime();
$date_diff = $event_start_date_formated->diff($now);

// In 1 day
if ( $date_diff->d == 1 ) {
    $show_event_start_date = 'Demain à ' . strftime( "%kh%M", strtotime( $event_start_date_formated->format( 'H:i' ) ) );
}
// Same day
else if ( $date_diff->d == 0 ) {
    //
    $time_to_show = $event_start_date_formated->format( 'd/m/Y H:i' );
    if ( $date_diff->h < 1 ) {
        $show_event_start_date = "Moins d\'une heure !";
    } else {
        if ( $date_diff->h < 16 ) {
            $show_event_start_date = "Moins de 16 heures !";
        }
    }
}
// More than 1 day
else {
    $show_event_start_date = strftime( "%a %e %b %kh%M", strtotime( $event_start_date_formated->format( 'Y/m/d H:i' ) ) );
}

@cleclech
Copy link

En utilisant la fonction DateTime::diff t'as un DateInterval facile à utiliser.
screenshot-preview dessineleweb fr-2020 11 17-12_15_23

@Leboubou111
Copy link
Author

Mon problème venait de 2 choses :
Au lieu d'utiliser la fonction strtotime pour récupérer le timestamp de l'objet DateTime je peux le récupérer directement depuis l'objet avec ->getTimestamp()
Ensuite, lorsque je fais un strtotime sur une date, je n'utilise pas le format ISO 8601 (YYYY-MM-DD).

J'ai donc modifié, et c'est bon, ceci dit, ta méthode avec le ->diff est bien mieux, je vais donc l'utiliser ;-)
On reconnait ceux qui en font toute la journée :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment