En el siguiente código, quiero mostrar la actualización hace algunas horas desde que se actualizaron los datos, pero ' + $item.updated_at->diffInHours(now()) + ' da el siguiente error Uncaught SyntaxError: expresión esperada, obtuve '>' It está apuntando a -> operador
Cualquier sugerencia es apreciada, gracias
índice.blade.php
<script> ... function fetchAllNames() { var _url = '{{ route("names.fetch.route") }}'; $.ajax({ type: "GET", url: _url, dataType: "json", success: function(response) { $('tbody').html(""); $.each(response.name, function($key, $item) { $('tbody').append('<tr>\ <td><input type="checkbox" id="sub_master" data-id="' + $item.id + '"></td>\ <td>' + $key + '</td>\ <td>' + $item.name + '</td>\ <td><label id="timeLabel">' + $item.updated_at->diffInHours(now()) + '</label></td>\ \</tr>'); }); } }); } ... </script>Controlador personalizado.php
public function FetchName() { $name = CandidateName::all(); return response()->json(['name'=>$name]); }no puede usar PHP en la respuesta a ajax, tiene dos opciones, ya sea manejarlo en PHP antes de devolver la respuesta o usarlo a través de js, también verifique esta biblioteca moment.js, su biblioteca Javascript que manipula fechas como la biblioteca Carbon
debería ser algo así en renderizar tu html
var now = moment(new Date()); //todays date var end = moment($item.updated_at); // another date $('tbody').append('<tr>\ <td><input type="checkbox" id="sub_master" data-id="' + $item.id + '"></td>\ <td>' + $key + '</td>\ <td>' + $item.name + '</td>\ <td><label id="timeLabel">' + moment.duration(now.diff(end)) + '</label></td>\ \</tr>');Suponiendo que $item.updated_at es una cadena con una fecha y hora como '2022-04-01 12:12:00'. Puede definir una función javascript
function diffInHoursToNow(dateStr){ var inputDate = new Date(Date.parse(dateStr)); var diff = new Date().getTime() - inputDate.getTime(); //depending on what you want you can round this off with //Math.floor(diff/3600)/1000 or similar return diff/3600000; }y luego, al generar la fila de su tabla, puede llamar
<td><label id="timeLabel">' + diffInHoursToNow($item.updated_at) + '</label></td></tr>'Aunque es válido y puede ser útil en ocasiones, probablemente no desee utilizar $ para iniciar los nombres de las variables de JavaScript ($clave y $elemento). Esto ayudará a eliminar la tentación de llamar a las funciones de php.