Formatieren eines benutzerdefinierten Meta-Box-Datums von JJJJ / MM / TT zu einer besser lesbaren Alternative

FRAGE

Dies folgt einer vorherigen Frage, die Milo hier zuvor gnädig beantwortet hat – Wie man CPT nach dem benutzerdefinierten Meta-Wert (Datum) sortiert und Beiträge Monat für Monat zurückgibt

Kurz gesagt, habe ich einige Probleme mit der Formatierung meiner benutzerdefinierten Meta-Box Datum in einigen Bereichen … Nämlich, im Back-End in meinen benutzerdefinierten Spalten und dann im Front-End in meiner Archivvorlage.

In meiner Archivvorlage versuche ich beispielsweise, das aktuelle Datum, zu dem die Beiträge gehören, über den unten eingefügten Code zurückzugeben, aber wenn ich einen Monat ohne Beiträge besuche, gibt meine Vorlage stattdessen das Datum “Januar 1970” zurück.

ID, 'epr_startdate', TRUE);?>   

Zusätzlich versuche ich im Backend so zu haben, dass, wenn nur das “Startdatum” erstellt wird, NUR diese Information ausgegeben wird, während, wenn der Benutzer sowohl ein “Startdatum” als auch ein “Enddatum” eingibt, dann wiederholen Sie beide Daten, aber wenn ich das Code-Beispiel unten verwende, werden meine Startdaten stattdessen in zweifacher Ausfertigung wie folgt zurückgegeben: 3. März 2013 – 3. März 2013.

 case "eventdate": $eventstart = get_post_meta($post->ID, 'epr_startdate', true); $eventstart_col = strtotime($eventstart); $eventend = get_post_meta($post->ID, 'epr_enddate', true); $eventend_col = strtotime($eventend); if ( get_post_meta($post->ID, 'epr_startdate', true) && ! get_post_meta($post->ID, 'epr_enddate', true) ) echo date( 'M n, Y', $eventstart_col ); elseif ( get_post_meta($post->ID, 'epr_enddate', true) ) echo date( 'M n, Y', $eventstart_col ) . ' — ' . date( 'M n, Y', $eventend_col ); else echo 'NA'; break; 

Vielen Dank im Voraus für Ihre Zeit.
Beste


ENDGÜLTIGE LÖSUNG

Vielen Dank an s_ha_dum für seine Geduld und Unterstützung!
Unten eingefügt sind die letzten funktionierenden Lösungen zu meiner Frage …

Das Datum korrekt ausgeben, wenn für den aktuell abgefragten Monat keine Posts existieren:

   

Benutzerdefinierte Spalten:

 case "eventdate": $start_date = get_post_meta($post->ID, 'epr_startdate', true); $start_date_col = strtotime($start_date); $end_date = get_post_meta($post->ID, 'epr_enddate', true); $end_date_col = strtotime($end_date); if ( $start_date_col && !$end_date_col ) echo date( 'M d, Y', $start_date_col ); elseif ( $start_date_col && $end_date_col ) echo date( 'M d, Y', $start_date_col ) . ' — ' . date( 'M d, Y', $end_date_col ); else echo 'NA'; break; 

Umleitung / Kalender -> / Kalender / JJJJ / MM:

 function redirect_empty_archive() { $m = get_query_var('calendar_month'); $y = get_query_var('calendar_year'); if ( is_post_type_archive('calendar') && ( empty($m) || empty($y) ) ) { wp_safe_redirect( '/calendar' . date('/Y/m') ); } } add_action('template_redirect','redirect_empty_archive'); 

Solutions Collecting From Web of "Formatieren eines benutzerdefinierten Meta-Box-Datums von JJJJ / MM / TT zu einer besser lesbaren Alternative"

aber wenn ich einen Monat ohne Beiträge besuche, gibt meine Vorlage stattdessen das Datum “Januar 1970” zurück.

Ja. Das wird passieren. UNIXTIME begann am 1. Januar 1970. Das ist “0000/00/00”, aber negative Zahlen funktionieren bis irgendwann im Jahr 1901. strtotime gibt false für irgendetwas außerhalb dieses Bereichs zurück, einschließlich Ihrer nicht vorhandenen Daten. date wird “Tag Null” annehmen, wenn ein falsches Datum angegeben wird. Daher erhalten Sie den 1. Januar 1970 für nicht vorhandene oder anderweitig errorshafte Daten. 64-Bit-Maschinen können größere Bereiche bewältigen, wenn ich mich richtig erinnere. Wie auch immer – ein nicht existierendes Datum wird dir 1970 geben. Versuch:

 $calendar_month = "1901/01/01"; $this_month = strtotime($calendar_month); var_dump($this_month); echo '
'; echo date('Y',$this_month); echo '
';

Sie möchten sicherstellen, dass Sie ein gutes Datum haben, bevor Sie es anzeigen.

 < ?php $this_month = strtotime($calendar_month); if (false !== $this_month) { ?> < ?php echo date( 'F Y', $this_month ); ?>< ?php } 

Ihr anderer Code ist ein wenig sperrig, aber es sieht so aus, als ob er funktionieren sollte, außer dass das Datumsformat falsch ist. Sie erhalten nicht "Monatstag, Jahr", wie Sie vermuten, sondern "Monatsname Monatsnummer, Jahr", die wie ein Duplikat aussieht, wenn die beiden Daten im selben Monat / Jahr liegen. Sehen Sie sich die Datumsformatierungsoperatoren gut an.

 $eventstart = get_post_meta($post->ID, 'epr_startdate', true); $eventstart_col = strtotime($eventstart); $eventend = get_post_meta($post->ID, 'epr_enddate', true); $eventend_col = strtotime($eventend); if ( $eventstart_col && !$eventend_col ) { // only the start date echo date( 'M d, Y', $eventstart_col ); } elseif ( $eventstart_col && $eventend_col ) { // both start and end date echo date( 'M d, Y', $eventstart_col ) . ' — ' . date( 'M d, Y', $eventend_col ); } else { echo 'NA'; } 

Ich denke, ich habe das richtig zusammengefügt.