[Resuelto] [Pregunta]: Función "is_timestamp"

Iniciado por Leguim, 20 Agosto 2019, 19:32 PM

0 Miembros y 1 Visitante están viendo este tema.

Leguim

Buenos días!

Busque en internet sobre si existía una función para validar un timestamp cualquiera..

Código (php) [Seleccionar]

$timestamp = date('Y-m-d H:i:s');


La idea seria validarlo y decir si es un timestamp o no.

Una de las funciones que encontré fue esta:

Código (php) [Seleccionar]

function is_timestamp($timestamp)
{
   return ((int)(string) $timestamp === $timestamp)
   && ($timestamp <= PHP_INT_MAX)
   && ($timestamp >= ~PHP_INT_MAX);
}


Pero no me funciona, vi otras funciones mucho más largas y complicadas y del año 2008 a 2013. Quizás hoy en día hay formas más eficientes de hacer esto y quería ver si alguien podía ayudarme.

Gracias!

MinusFour

Esa función no regresa un timestamp. Timestamps son números, date regresa cadenas de caracteres, fechas.
Código (php) [Seleccionar]

strtotime($fecha)


Regresa un timestamp si es una fecha valida o falso si es una fecha que no pudo procesar.

Leguim

Entonces debería validar el timestamp, esta bien la función esa es interesante y puede complementarse a lo siguiente. Validar si es un valor numérico "is_numeric" ? pero si me decis que date regresa cadena de caracteres como sería?

MinusFour

#3
Cita de: MiguelCanellas en 21 Agosto 2019, 00:40 AM
Entonces debería validar el timestamp, esta bien la función esa es interesante y puede complementarse a lo siguiente. Validar si es un valor numérico "is_numeric" ? pero si me decis que date regresa cadena de caracteres como sería?

No entendí la pregunta. Para que quieres usar is_numeric si no trabajas con timestamps. Lo que has puesto ahí son fechas. Si estuvieras haciendo:

Código (php) [Seleccionar]

time();


Estarías trabajando con números, con timestamps de verdad.

Otra cosa que se me olvido mencionar, si tu quieres valida una fecha contra un formato en específico tienes que usar:

Código (php) [Seleccionar]

Date::createFromFormat('Y-m-d H:i:s', $fecha);


Edit: Ah, si quieres validar que $fecha es un string puedes usar:

Código (php) [Seleccionar]

is_string($fecha);


Pero creo que no es necesario, PHP probablemente regrese falso si no es un string o una conversión de un string valido.

#!drvy

Citaresta bien la función esa es interesante y puede complementarse a lo siguiente. Validar si es un valor numérico "is_numeric" ?

No tiene ningún sentido validar si es numérico cuando ya estas comprobando que el valor de lo que le das, forzado a un Integer, debe estar en un rango determinado.

Citarpero si me decis que date regresa cadena de caracteres como sería?

Date regresa la fecha en formato humano. Bueno, en verdad regresa la fecha según el formato que le pasas, en tu caso, le estas pasando un formato de tipo 0000-00-00 00:00:00.

Si quieres sacar un timestamp actual, usa time();


PD: Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

Meh xD

Saludos

Leguim

Cita de: #!drvy en 21 Agosto 2019, 01:08 AM
No tiene ningún sentido validar si es numérico cuando ya estas comprobando que el valor de lo que le das, forzado a un Integer, debe estar en un rango determinado.

Date regresa la fecha en formato humano. Bueno, en verdad regresa la fecha según el formato que le pasas, en tu caso, le estas pasando un formato de tipo 0000-00-00 00:00:00.

Si quieres sacar un timestamp actual, usa time();


PD: Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

Meh xD

Saludos

La razón de esto es:

digamos que tengo un input que le pido al usuario enviar un timestamp o mejor dicho una fecha que es esta "2019-08-13 00:10:04" ahora el usuario si quiere me puede mandar un "afdasdf" y no quiero eso, o me puede mandar "85934-fasdfasdf" que tampoco quiero...

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
xD ami también me salio eso jaja


#!drvy

#6
Vale, pero ahí no quieres validar un UNIX TIMESTAMP, quieres validar un TIMESTAMP. Hay diferencia. En esencia, la palabra "timestamp" signfica marca de tiempo o marca temporal, entonces, puede tener muchas definiciones como es el caso.

Lo más habitual en el mundo de la programación, es que cuando menciones timestamp, te refieras a un UNIX TIMESTAMP que son los segundos que han pasado desde el 1 de Enero de 1970. Sin embargo, cuando en dices TIMESTAMP en bases de datos, y más en MySQL y derivados, quieres decir un formato YYYY-MM-DD HH:MM:SS.

Entonces, aclarada la confusión, usa lo que te ha pasado el compañero @Minusfour:

Código (php) [Seleccionar]
function is_timestamp($timestamp, $format = 'Y-m-d H:i:s')
{
   $date = DateTime::createFromFormat($format, $timestamp);
   return ($date && $date->format($format) === $timestamp);
}

var_dump(is_timestamp('2019-08-20 23:54:59')); // true
var_dump(is_timestamp('85934-fasdfasdf')); // false


Aunque yo personalmente le pondría otro nombre para evitar confusiones. xD

Saludos

Leguim