php - remove - strip_tags wordpress
Función NOW() en PHP (14)
Además de
date("Y-m-d H:i:s")
¿Hay una función de PHP que devuelve la fecha y la hora en el mismo formato que la función de MySQL NOW()
?
Sé cómo hacerlo usando date()
, pero estoy preguntando si existe una función solo para esto.
Por ejemplo para devolver:
2009-12-01 00:00:00
Con la versión de PHP> = 5.4 DateTime puede hacer esto: -
echo (new /DateTime())->format(''Y-m-d H:i:s'');
Estaba buscando la misma respuesta, y he encontrado esta solución para PHP 5.3 o posterior:
$dtz = new DateTimeZone("Europe/Madrid"); //Your timezone
$now = new DateTime(date("Y-m-d"), $dtz);
echo $now->format("Y-m-d H:i:s");
La función MySQL NOW()
devuelve la marca de tiempo actual. La única forma que encontré para PHP es usando el siguiente código.
$curr_timestamp = date(''Y-m-d H:i:s'');
Me gusta la solución publicada por el usuario1786647, la he actualizado un poco para cambiar la zona horaria a un argumento de función y agregar soporte opcional para pasar una cadena de tiempo de Unix o de fecha y hora para usar para la marca de fecha devuelta.
También incluye un retroceso para "setTimestamp" para usuarios que ejecutan una versión inferior a PHP 5.3:
function DateStamp($strDateTime = null, $strTimeZone = "Europe/London") {
$objTimeZone = new DateTimeZone($strTimeZone);
$objDateTime = new DateTime();
$objDateTime->setTimezone($objTimeZone);
if (!empty($strDateTime)) {
$fltUnixTime = (is_string($strDateTime)) ? strtotime($strDateTime) : $strDateTime;
if (method_exists($objDateTime, "setTimestamp")) {
$objDateTime->setTimestamp($fltUnixTime);
}
else {
$arrDate = getdate($fltUnixTime);
$objDateTime->setDate($arrDate[''year''], $arrDate[''mon''], $arrDate[''mday'']);
$objDateTime->setTime($arrDate[''hours''], $arrDate[''minutes''], $arrDate[''seconds'']);
}
}
return $objDateTime->format("Y-m-d H:i:s");
}
O puedes usar las constantes de DateTime
:
echo date(DateTime::W3C); // 2005-08-15T15:52:01+00:00
Aquí está la lista de ellos:
ATOM = "Y-m-d/TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00
COOKIE = "l, d-M-Y H:i:s T" ; // -> Monday, 15-Aug-2005 15:52:01 UTC
ISO8601 = "Y-m-d/TH:i:sO" ; // -> 2005-08-15T15:52:01+0000
RFC822 = "D, d M y H:i:s O" ; // -> Mon, 15 Aug 05 15:52:01 +0000
RFC850 = "l, d-M-y H:i:s T" ; // -> Monday, 15-Aug-05 15:52:01 UTC
RFC1036 = "D, d M y H:i:s O" ; // -> Mon, 15 Aug 05 15:52:01 +0000
RFC1123 = "D, d M Y H:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000
RFC2822 = "D, d M Y H:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000
RFC3339 = "Y-m-d/TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00 ( == ATOM)
RFC3339_EXTENDED = "Y-m-d/TH:i:s.vP" ; // -> 2005-08-15T15:52:01.000+00:00
RSS = "D, d M Y H:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000
W3C = "Y-m-d/TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00
Para la depuración prefiero una más corta ( 3v4l.org ):
echo date(''ymd/THisP''); // 180614T120708+02:00
Prueba esto:
date("Y-m-d H:i:s");
Puedes usar la clase simplePHP para hacer esto:
echo $date->now();
Esta clase también proporciona muchos métodos útiles para sumar, restar y comparar fechas. Puedes consultar la página de tutoriales para más ejemplos.
Una respuesta más me parece fácil de usar:
echo date(''c'');
// 2015-07-27T00:00:00+02:00
Esta es la fecha ISO 8601 (agregada en PHP 5) que MySQL usa
Editar
MySQL 5.7 no permite la zona horaria en la fecha y hora de forma predeterminada. Puede deshabilitar el error con SQL_MODE=ALLOW_INVALID_DATES
, SQL_MODE=ALLOW_INVALID_DATES
la respuesta aquí para más detalles: https://.com/a/35944059/2103434 Pero eso también significa que la zona horaria se perderá al guardar en la base de datos!
Por defecto, MySQL usa la zona horaria del sistema, y siempre que php use la misma zona horaria , debería estar bien. En mi caso CET / UTC + 2.
Eso significa que si inserto 2015-07-27T00:00:00+02:00
en la base de datos, solo se almacenará 2015-07-27T00:00:00
(¡pero esa es la hora local correcta!).
Cuando vuelvo a cargar el tiempo en PHP,
$importedDate = new /DateTime(''2015-07-27T00:00:00'')
asumirá automáticamente que es +02:00
zona horaria, ya que es el valor predeterminado. Imprimir esto será correcto de nuevo:
echo $importedDate->format(''c'');
// 2015-07-27T00:00:00+02:00
Para estar seguro, siempre use UTC en el servidor, especifíquelo en MySQL y PHP, y luego conviértalo a la configuración regional de sus usuarios cuando muestre la fecha:
date_default_timezone_set(''UTC'');
$importedDate = new /DateTime(''2015-07-27T00:00:00+02:00'');
echo $importedDate->format(''c'');
// 2015-07-27T00:00:00+02:00
$importedDate->setTimezone(new /DateTimeZone("America/New_York"));
echo $importedDate->format(''c'');
// 2015-07-26T18:00:00-04:00
Utilice strftime
:
strftime("%F %T");
%F
es lo mismo que%Y-%m-%d
.%T
es lo mismo que%H:%M:%S
Aquí hay una demostración de ideone.
Utilice esta función:
function getDatetimeNow() {
$tz_object = new DateTimeZone(''Brazil/East'');
//date_default_timezone_set(''Brazil/East'');
$datetime = new DateTime();
$datetime->setTimezone($tz_object);
return $datetime->format(''Y/-m/-d/ h:i:s'');
}
puede utilizar la función de fecha php con el formato correcto como parámetro,
echo date("Y-m-d H:i:s");
Mímica en PHP
Para imitar la función MySQL NOW()
en PHP puede usar date_create()->format(''Ymd H:i:s'')
. Este enfoque le permite manejar las manipulaciones de tiempo / zona horaria más fácilmente que la date(''Ymd H:i:s'')
. Es más legible y funciona desde php 5.2.
$now = date_create(''now'')->format(''Y-m-d H:i:s''); // works in php 5.2 and higher
$now = date_create()->format(''Y-m-d H:i:s''); // also works in php 5.2
$now = new DateTime(''now'')->format(''Y-m-d H:i:s''); // syntax error!!!
$now = (new DateTime(''now''))->format(''Y-m-d H:i:s''); // works in php 5.4 and higher
$now = date(''Y-m-d H:i:s''); // works as well, but it''s less nice then date_create()
La razón por la que esto funciona es porque la función MySQL NOW()
da el valor de fecha y hora en este formato: ''YYYY-MM-DD HH:MM:SS''
. Consulte aquí: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now . Un hecho interesante es que es posible obtener el formato de fecha y hora ejecutando esta consulta: SHOW VARIABLES LIKE ''d%e_format''
, el resultado podría ser algo como esto:
Variable_name Value
date_format %Y-%m-%d
datetime_format %Y-%m-%d %H:%i:%
Las variables aquí arriba son variables de solo lectura. Así que no puedes cambiarlo. Supongo que la función MySQL NOW()
obtiene su formato de la variable datetime_format
.
date_create () -> format () VS date ()
Los datos favorables de date_create(''now'')->format(''Ymd H:i:s'')
sobre la date(''Ymd H:i:s'')
son:
- Manipulaciones más fáciles de manejar.
- más fácil de manejar zonas horarias
- mas oop
Manipulaciones más fáciles de manejar.
date_create()
acepta un formato de fecha / hora relativo (como now
, yesterday
o +1 day
) vea este enlace , ejemplo:
$tomorrow = date_create(''+1 day'')->format(''Y-m-d H:i:s'');
date()
acepta un formato de fecha / hora relativo, como este:
$tomorrow = date(''Y-m-d H:i:s'', strtotime(''+1 day''));
$tomorrow = date(''Y-m-d H:i:s'', (time() + 86400)); // 86400 seconds = 1 day
más fácil de manejar zonas horarias
Cuando las zonas horarias son importantes, el uso de date_create()->format()
tiene mucho más sentido que date()
porque date()
usa la zona horaria predeterminada que está configurada en php.ini
en la directiva date.timezone
. (enlace: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone ). Es posible cambiar la zona horaria, por ejemplo, date_default_timezone_set(''Asia/Tokyo'');
. Pero la desventaja de esto es que afectará a todas las funciones de fecha / hora. Este problema no existe si está utilizando date_create()->format()
en combinación con timezone_open()
.
Vea una lista de todas las zonas horarias compatibles: http://php.net/manual/en/timezones.php . Lo curioso es que incluso es compatible con el círculo ártico y la Antártida.
mas oop
OOP utiliza objetos de estado completo. Así que prefiero pensar de esta manera:
// Create a DateTime Object.
// Use the DateTime that applies for tomorrow.
// Give me the datetime in format ''Y-m-d H:i:s''
$tomorrow = date_create(''+1 day'')->format(''Y-m-d H:i:s'');
Entonces pensar de esta manera:
// Give me a date time string in format ''Y-m-d H:i:s'',
// use strtotime() to calculate the Unix timestamp that applies for tomorrow.
$tomorrow = date(''Y-m-d H:i:s'', strtotime(''+1 day''));
Por lo tanto, diría que el date_create()->format()
es más legible para mí que date()
.
Ejemplo de date_create () -> formato ()
Utilizo este enfoque para mis proyectos si tengo que llenar una matriz. Me gusta esto:
$array = array(
''name'' => ''John'',
''date_time'' => date_create(''now'')->format(''Y-m-d H:i:s''), // uses the default timezone
''date_time_japan'' => date_create(''now'', timezone_open(''Asia/Tokyo''))->format(''Y-m-d H:i:s''),
);
date(''Y-m-d H:i:s'')
Busque aquí más detalles: http://pl.php.net/manual/en/function.date.php