web-dev-qa-db-fra.com

Calculs à partir de 2 champs personnalisés

Nous avons du mal à trouver un moyen de calculer un décalage horaire entre deux dates enregistrées en tant que champs personnalisés sur WP. Nous utilisons actuellement deux plugins différents:

a) Types de contenu faciles

b) Liste de publication avancée

Avec le premier, nous avons créé une série de champs personnalisés contenant les dates de début (ecpt_data-consegna) et de fin (ecpt_data-dismissione), et nous souhaitons trouver un moyen de montrer le décalage horaire entre ces dates - indiqué sous XX années, XX months, XX days - dans une cellule d'une table générée via le plugin Advanced Post List. Veuillez noter que si la date d'édition est manquante, la différence doit être calculée entre la date de début et la date actuelle (maintenant).

Après avoir beaucoup bavardé avec les développeurs des deux plugins, nous nous sommes arrêtés. Actuellement, nous avons développé une fonction personnalisée PHP pour gérer les calculs de date comme suit:

function calculateDiff() {
$start_date = new DateTime(get_post_meta( get_the_ID(), 'ecpt_data-consegna', true ));
$since_start = $start_date->diff(new DateTime(get_post_meta( get_the_ID(), 'ecpt_data-dismissione', true )));

if($since_start->days == 0) {
        $since_start = $start_date->diff(new DateTime());
}

return $since_start->y . ' years, ' . $since_start->m . ' months, ' . $since_start->d . ' days'; }

Mais quand nous mettons ce shortcode APL dans l'une des cellules générées par APL:

<td>[php_function name="calculateDiff"]</td>

Le résultat est une page Web cassée, coupée avant la génération de la table elle-même. Et quand nous essayons d'utiliser ce code à la place:

<td><?php echo calculateDiff();?></td>

Le résultat est une cellule vide.

Nous avons également essayé d'appeler directement la fonction (hors APL) et le résultat est toujours vide. Donc, il doit y avoir quelque chose qui ne va pas quelque part ...

Toute aide serait grandement appréciée!

1
Diego Meozzi

Je ne sais pas dans quelle mesure cela vous aidera, mais lorsque j’ai fait les comparaisons date/heure, j’ai toujours dû les convertir d'abord en horodatages UNIX (convertit la date/heure en chiffres, que vous pouvez comparer moins. que/supérieur à/égal au nombre suivant), puis après le tri de la différence, reconvertissez-le avec date ().

Voici un exemple simple (pas de votre code, mais d'un quickie que j'ai fait pour un client il y a quelques années):

$today = date('d-m-Y');                       // today's date
$today = strtotime($today);                    // UNIX conversions  

Je n'ai jamais eu de chance en comparant les dates sans les convertir au préalable en UNIX.

1
Shelly