entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Convertir timedata a data

Estoy intentando sacar la fecha de publicación de un video de youtube desde la api V3 de Youtube con json, el problema es que la api usa TimeData para registrar el tiempo de subida del video, por lo que necesito hacer que la fecha se muestre en date, aqui los codigos.

Haciendo la consulta desde el index con <?=$youtube["items"][0]["snippet"]["publishedAt"];?> envia los datos a otro archivo donde contiene

$youtube = json_decode(file_get_contents($api_url), true);

y la respuesta de la api de youtube

 "items": [
  {
   "kind": "youtube#playlistItem",
   "etag": "\"DsOZ7qVJA4mxdTxZeNzis6uE6ck/-SmKAyznk4oo3CoS0JJjb-uCqpE\"",
   "id": "UUewTy1p86QrzLXw-AWljdRHi14WQ0f6I8",
   "snippet": {
    "publishedAt": "2016-02-11T01:19:03.000Z",

En el archivo muestra 2016-02-11T01:19:03.000Z, como lo hace para convertirlo a date??

2 Respuestas

4votos

magarzon Puntos30650

Si lo que quieres es obtener un objeto DateTime de PHP, lo puedes hacer directamente con:

$published = "2016-02-11T01:19:03.000Z";
$d = date_create($published);

Que en realidad es un alias de esto:

$d = new \DateTime($published);

Ya que el formato que usa YouTube es el ISO8601, que DateTime soporta.

Una vez que tienes un objeto de tipo \DateTime, ya puedes hacer con él todas las operaciones que esta clase permite

0voto

Mariio comentado

Ya pero no entiendo, yo lo quiero convertir a date xD, usando tu código con las modificaciones:

    $published = date_create('$youtube["items"][0]["snippet"]["publishedAt"]');
    echo date_format($published, 'Y-m-d');

da este error

Parse error: syntax error, unexpected '$d' (T_VARIABLE)

la linea 19 es

$d = date_create($published);

Tambien intente con

    $published = date_create('$youtube["items"][0]["snippet"]["publishedAt"]'); 
    echo date_format($published, 'Y-m-d'); =>

pero da el error Warning: date_format() expects parameter 1 to be DateTimeInterface, boolean given in - on line 19

0voto

magarzon comentado

Porque has puesto una cadena como argumento de date_create, y por tanto da error, y al dar error devuelve false, por tanto $published es un boolean y date_format espera un objeto DateTime (bueno, más explícitamente, que implemente la interfaz DateTimeInterface), por eso te da el error.

Tienes que ponerlo sin comillas simples:

$published = date_create($youtube["items"][0]["snippet"]["publishedAt"]); 
    echo date_format($published, 'Y-m-d');

0voto

Mariio comentado

Correcto, ahora si devuelve el valor del json, muchas gracias :D

1voto

Cr998 Puntos260

Usando php existe una función que te parsea un date String, este devuelve un array con claves las cuales son year,month,day,hour..etc, date() es una función que te devuelve un entero que representan los segundos, lo que tendrías que hacer es multiplicar cada valor del array anterior e ir sumándolo .

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta