Formatando a data da checkbox meta personalizada de AAAA / MM / DD para uma alternativa mais legível

QUESTÃO

Isto está seguindo uma pergunta anterior que foi graciosamente respondida por Milo anteriormente aqui – Como ordenar CPT por meta valor personalizado (data) e retornar mensagens mês a mês

Em suma, estou tendo alguns problemas com a formatação adequada da minha data de checkbox de meta personalizada em algumas áreas … Nomeadamente, no back-end nas minhas colunas personalizadas e, em seguida, no front-end no meu modelo de arquivo.

Por exemplo, no meu modelo de arquivo, estou tentando retornar a data atual para a qual as postagens pertencem, através do código colado abaixo, mas quando eu visitar um mês sem posts meu modelo retorna a data “janeiro de 1970”.

ID, 'epr_startdate', TRUE);?>   

Além disso, no back-end eu estou tentando tê-lo de modo que, se apenas a “data de início” for criada, então SOMENTE produz essa informação, enquanto que, se o usuário inserir uma “data de início” e uma “data final”, então Retribua ambas as datas, mas quando eu uso o exemplo de código abaixo, minhas datas de início são retornadas em duplicata como esta em vez disso: 3 de março de 2013 – 3 de março de 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; 

Agradeço antecipadamente pelo seu tempo.
Melhor


SOLUÇÃO FINAL

Muito obrigado a s_ha_dum por sua paciência e apoio!
Aqui estão as soluções de trabalho final para minha pergunta …

Saindo corretamente a data em que não existem postagens para o mês atualmente consultado:

   

Colunas personalizadas:

 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; 

Redirecionamento / calendar -> / calendar / aaaa / 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 "Formatando a data da checkbox meta personalizada de AAAA / MM / DD para uma alternativa mais legível"

mas quando eu viajo um mês sem postagens, meu modelo retorna a data “Janeiro de 1970”.

Sim. Isso acontecerá. UNIXTIME começou em 1 de janeiro de 1970. Isso é “0000/00/00”, mas os números negativos funcionam até algum tempo em 1901. strtotime retornará false para qualquer coisa fora desse intervalo, incluindo suas datas inexistentes. date assumirá “dia zero” se for dada uma data incorreta, daí você obtém 01 de janeiro de 1970 por datas inexistentes ou com defeito. As máquinas de 64 bits podem lidar com intervalos maiores, se eu me lembro corretamente. De qualquer forma, uma data inexistente lhe dará 1970. Tente:

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

Você quer ter certeza de ter uma boa data antes de exibi-la.

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

Seu outro código é um pouco volumoso, mas parece que deve funcionar, exceto que seu formato de data está errado. Você não está recebendo "Month Day, Year", como eu penso que deseja, mas "Month-Name Month-Number, Year", que parecerá uma duplicata se as duas datas forem no mesmo mês / ano. Dê uma boa olhada na data de formatação dos operadores .

 $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'; } 

Eu acho que tenho que voltar a juntar-se corretamente.