Pregunta sobre Developing with WordPress de Wordpress:

Reemplazar current_time (‘marca de tiempo’)

Un usuario pregunt贸 馃憞

Hola,

Mientras leo el hilo sobre las mejoras de fecha / hora, noto que se alienta a usarlo current_time( 'timestamp' ).

Esta funci贸n devuelve el local sello de tiempo. Necesito eso. Pero no puedo encontrar un reemplazo para esto, que devuelve una marca de tiempo con una zona horaria local incluida.

Prueba el nuevo current_datetime() funci贸n pero esa no devuelve una marca de tiempo. Entonces usando strtotime() Puedo generar una marca de tiempo:


$obj = current_datetime();
$array = get_object_vars($obj);
$my_current_time = strtotime($array['date']);

Pero la zona horaria puede ser diferente cuando un plugin / tema establece otro usando una funci贸n date_default_timezone_set(). As铆 que no puedo confiar plenamente en esto.

驴Qui茅n me puede ayudar con esto?

Guido

(@ guideo07111975)

Hace 11 meses, 1 semana

Hola de nuevo @autotutorial,

Intento establecer la hora a la medianoche, usando su c贸digo, pero no puedo:


$current_date_time = current_datetime();
$current_date_time->setTime(0, 0);
$local_time_midnight = $current_date_time->getTimestamp()+$current_date_time->getOffset();

Pero a煤n se est谩 restaurando el horario local.

Hasta donde yo s茅 setTime es compatible?

Guido

(@ guideo07111975)

Hace 11 meses, 1 semana

Esto tambi茅n devuelve una marca de tiempo de medianoche seg煤n la zona horaria:


$current = current_time('Y-m-d');
echo strtotime($current);

Devoluciones: 1577145600

La primera idea es que la funci贸n completa de current_time () quedar谩 obsoleta en el futuro, pero solo la parte de la marca de tiempo.

Guido

(@autotutorial)

Hace 11 meses, 1 semana

// DateTimeImmutable does not change use yours functions,
 this is the correct use see https://www.php.net/manual/en/class.datetimeimmutable.php for all list functions DateImmutable
// I'm DateTimeImmutable and Retrive current date object
// options 1 from PHP 5.5.0
$array = current_datetime();
// $array have Timezone Dashboard settings
$output_date_string = $array->format( 'Y-m-d H:i:s' ); // here YYYY-MM-DD HH:MM:SS

$timezone = wp_timezone(); // Retrive Dashboard timezone from WordPress 5.3
// i'm DateTime
$my_date = new DateTime( $output_date_string, $timezone );
$my_date->modify( 'today midnight' );
echo $my_date->format( 'Y-m-d H:i:s' );

/*
// options 2
$timezone = wp_timezone();
$my_date = new DateTime( 'today midnight', $timezone );
echo $my_date->format( 'Y-m-d H:i:s' );

// options 3
$timezone = wp_timezone();
$my_date = new DateTime( 'now', $timezone ); //php 7.1 microseconds parameter added
$my_date->setTime( 0, 0, 0, 0); // php 7.1 four microseconds parameter added
echo $my-date->format('Y-m-d H:i:s'); // for setTime

//$var->setTimezone( $timezone ); from PHP 5.2.1
*/

Nunca funciones PHP antiguas, strtotime o mktime, etc.

(@ guideo07111975)

Hace 11 meses, 1 semana

隆Excelente! Entonces estoy usando una funci贸n antigua, que se reemplaza por otras mejores.

Voy a elegir la opci贸n 2 .. por cierto today y midnight regreso a la misma hora (00:00:00), seg煤n el Manual de PHP.

隆Gracias!

Guido

(@autotutorial)

Hace 11 meses, 1 semana

si est谩 en la direcci贸n correcta, el formato relativo es el que se aplica a strtotime o para la clase DateTime DateTimeImmutable, recuerde no ingresar una zona horaria al generar un desplazamiento desde php 8.0.

Nota:

El par谩metro $ timezone y la zona horaria actual se ignoran cuando el par谩metro $ time es una marca de tiempo UNIX (por ejemplo, @ 946684800) o se especifica una zona horaria (por ejemplo, 2010-01-28T15: 00: 00 + 02: 00 ).

Utilice siempre correctamente.

$timezone = wp_timezone();
$my_date = new DateTime( '@' . 1500000000);
$my_date->setTimezone( $timezone ); // force use a un timezone or offset +01:00 , this offset php 5.5.0

(@ guideo07111975)

Hace 11 meses, 1 semana

De mi ..

Para tu nota:
'today' se convierte en una marca de tiempo UNIX, 驴verdad?

驴Por qu茅 no deber铆a funcionar como strtotime? Funciona perfectamente. Y el current_time() una funci贸n no se deprecia.


$current = current_time('Y-m-d');
echo strtotime($current);

FYI: Solo necesito el local de hoy con la hora de la medianoche (00:00:00) para mi gui贸n.

Guido

(@autotutorial)

Hace 11 meses, 1 semana

https://www.php.net/manual/en/function.date-default-timezone-set.php
default-date-time-set-zone y https://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone date.timezone Puedo establecer una zona horaria, WordPress ha estado usando UTC de forma predeterminada durante m谩s de 10 a帽os, puede seleccionar su zona horaria (cadena de tiempo o n煤mero de compensaci贸n) m谩s adelante en el panel, el php antiguo funciona si hay una zona horaria en lugar de UTC, producen una marca de tiempo para esa zona horaria y $array->getTimestamp() El es de UTC. Dado que el uso de una zona horaria expl铆cita en DateTime, su hora local es siempre la hora correcta, tambi茅n debe recordarse que Europa / Roma 2020-03-29 02:00:00 tambi茅n indica la zona horaria que muestra Europa / Roma 2020-03-29 03: 00: 00 El horario de verano est谩 en uso (la marca de tiempo UTC siempre est谩 activada, la salida para los cambios de horario de verano) . del c谩lculo current_time antes de WordPress 5.3 offset WP (voluntariamente tom贸 UTC y agreg贸 la suma al offset en el panel). Para WordPress 5.3 es seguro (WordPress ahora usa la clase DateTime). Dado que se ha utilizado incorrectamente en el pasado, es correcto eliminar current_time y utilizar current_datetime.

(@ guideo07111975)

Hace 11 meses, 1 semana

Lo siento, no soy lo suficientemente inteligente para entender esto completamente.

Quiero usar las nuevas funciones de fecha / hora de WP. Algunas l铆neas simples de c贸digo que ser谩n compatibles en los pr贸ximos a帽os.

Quiero obtener una marca de tiempo de medianoche (00:00:00) de current_datetime() funci贸n pero no lo estoy logrando. Pens茅 que podr铆a usarlo setTime (porque la clase acepta DateTimeImmutable) pero esto no funciona:


$array = current_datetime();
$localtime = $array->getTimestamp()+$array->getOffset();
$localtime->setTime( 0, 0, 0, 0);
echo $localtime;

Esto se debe a un error.

Guido

(@autotutorial)

Hace 11 meses, 1 semana

function current_datetime() {
    return new DateTimeImmutable( 'now', wp_timezone() );
}

No puede usar las funciones de DateTime para DateTimeImmutable, vea la primera opci贸n de mi c贸digo 馃檪 DateTimeImmutable https://www.php.net/manual/en/datetimeimmutable.settime.php no modifique DateTimeImmutable, convi茅rtalo a DateTime.
getTimestamp() debe usarse despu茅s de la medianoche
$object->getTimestamp();
DateTime :: getTimestamp DateTimeImmutable :: getTimestamp DateTimeInterface :: getTimestamp date_timestamp_get

Aprenda a usar DateTime, en el momento en que no puede administrar DateTimeImmutable, este c贸digo est谩 aqu铆 para completarlo.

$array = current_datetime();
$var = $array->setTime( 0, 0, 0, 0); // Work for version PHP 7.1 or above
$localtime = $var->getTimestamp()+$var->getOffset();
echo $localtime;

(@autotutorial)

Hace 11 meses, 1 semana

Lo siento por reemplazarlo $localtime = $var->getTimestamp()+$var->getOffset(); le $localtime = $var->getTimestamp() 23:00 UTC OK, use la zona horaria para convertir Europa / Roma 00:00 馃檪 (convierta local a UTC con esta zona horaria $object->setTimezone( new DateTimeZone( 'UTC' ) ); ).

$array = current_datetime();
$var = $array->setTime( 0, 0, 0, 0); // Work for version PHP 7.1 or above

$timestamp = $var->getTimestamp();
$my_date = new DateTime( '@' . $timestamp );
$my_date->setTimezone( new DateTimeZone( 'UTC' ) ); //23:00 UTC correct

//local time
$timezone = $var->getTimezone(); //Europe/Rome offset +01:00
$my_date2 = new DateTime( '@' . $timestamp );
$my_date2->setTimezone( $timezone ); //00:00 Europe/Rome correct

//Local time show UTC, never use it
$new_timestamp = $timestamp+$var->getOffset();
$my_date3 = new DateTime( '@' . $new_timestamp )
$my_date3->setTimezone( new DateTimeZone( 'UTC' ) ); //00:00 correct conversion from local to UTC

(@ guideo07111975)

Hace 11 meses, 1 semana

Hola,

As铆 que este parece funcionar perfectamente para obtener la hora local de la medianoche de hoy:


$array = current_datetime();
$var = $array->setTime( 0, 0, 0, 0); // Work for version PHP 7.1 or above
$localtime = $var->getTimestamp()+$var->getOffset();
echo $localtime;

Ya no querr铆a usar DateTime, debido a este comentario suyo, para la zona horaria.

Guido

(@autotutorial)

Hace 11 meses, 1 semana

Explicar茅, no puede usar una zona horaria en una instancia de objeto DateTime

// Bad for DateTime
$object = new DateTime( '@' . 10000000, new DateTimeZone( 'Europe/Rome' ) );

si la fecha tiene una marca de tiempo (UTC) o una zona horaria expl铆cita. Siempre puedes usar $object->setTimezone(new DateTimeZone('Europe/Rome')); no importa si ha ingresado con la marca de tiempo o la zona horaria. setTimezone se usa directamente para establecer la zona horaria y no se pueden cometer errores.

(@ guideo07111975)

Hace 11 meses, 1 semana

Soy un aprendiz lento, pero ahora entiendo todo lo que necesito saber para completar / actualizar mi gui贸n. 隆Gracias y feliz Navidad!

Guido

驴Solucion贸 tu problema??

0 / 0

Deja una respuesta 0

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *