Pregunta

Tengo una cadena de fecha y hora como tal. 14/04/2014 4:57:16 PM y estoy usando fecha y hora de carbono para trabajar en ello.

Sin embargo, tan pronto como intento hacer esto

$dt = Carbon::createFromTimestampUTC($encDateTime);

Sin embargo, recibo errores de análisis:FechaHora::__construcción():No se pudo analizar la cadena de tiempo (@ 14/04/2014 5:03:45 p. m.) en la posición 3 (/):Carácter inesperado.

Actualizar: Intenté hacer esto:

$date = DateTime::createFromFormat('d/m/Y H:i A', $encDateTime);
dd($date->format('Y-m-d H:i:s'));

y me sale el siguiente errorLlamada a una función miembro format() en un no objeto

¿Puedes ayudarme con esto?

Gracias

¿Fue útil?

Solución

Su cadena de fecha contiene un espacio al final, por eso DateTime::createFromFormat() no logra analizarlo.Para eliminar el espacio en blanco adicional desde el principio y/o el final, puede usar trim().

Además, originalmente estabas usando H, que es el formato de 24 horas con ceros a la izquierda.En este caso, parece que tienes un formato de 12 horas, así que usa g en cambio (h también funcionaría).

Lo siguiente debería funcionar:

$date = DateTime::createFromFormat('d/m/Y g:i:s A', trim($encDateTime));

Cuando reciba dichos errores, siempre var_dump() Los valores.De esa manera, puedes comprobar si la variable contiene lo que crees que contiene.

Otros consejos

El método estático createFromFormat de DateTime regresa NULL cuando hay un error de análisis.El formato que se le dio (d/m/Y H:i A) estaba mal.De ahí el error "Llamada a una función miembro format() en un no objeto".

Puede crear objetos DateTime a partir de cadenas de tiempo no estándar como esta:

$time = '14/04/2014 4:57:16 PM';
$date = Carbon\Carbon::createFromFormat('d/m/Y g:i:s A', $time);

Los diferentes caracteres de formato disponibles y sus explicaciones se pueden encontrar en la documentación para date().

No sé nada sobre Carbon, pero esto funciona.Estabas usando dos dígitos (H) en lugar de h (editar:g es exactamente lo mismo) en su método createFromFormat:

$encDateTime = "14/04/2014 4:57:16 PM";

$date1 = DateTime::createFromFormat('d/m/Y h:i:s A', trim($encDateTime));
echo $date1->format('Y-m-d H:i:s');

resultado:

2014-04-14 16:57:16

Solo usa laravel la fecha funciona como:

$productsales=DB::table('tbl_trans')   
     ->leftjoin('tbl_product','tbl_product.prod_id','=','tbl_trans.product_id')  
     ->select(DB::raw('count(product_id) as quant'),'product_id','tbl_product.name','tbl_product.code','tbl_product.price')    
     ->groupBy('product_id','code','name','price')    
     ->whereDate('tbl_trans.created_at','2017-07-29')  
     ->get();


   return view('reports.productsales',compact('productsales'));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top