在 html 响应中使用 Carbon frm ajax

Using Carbon in html response frm ajax

在下面的代码中,我想显示几个小时前的更新,因为数据已更新,但是 ' + $item.updated_at->diffInHours(now()) + ' 给出以下错误 Uncaught SyntaxError: expected expression, got '>' 它指向 -> operator

欢迎任何建议,谢谢

index.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>

CustomController.php

public function FetchName() 
{ 
    $name = CandidateName::all(); 
    return response()->json(['name'=>$name]); 
}

您不能在对 ajax、 的回复中使用 PHP 您有两种选择是否在 PHP 中处理它 在 return response 或 use 之前可以通过 js 处理它, 也请检查这个 moment.js Library 它的 Javascript 像 Carbon

这样操作日期的库

应该是这样的 在渲染你 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>');

假设 $item.updated_at 是一个带有日期时间的字符串,例如“2022-04-01 12:12:00”。 你可以定义一个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;
}

然后在生成 table 行时,您可以调用

<td><label id="timeLabel">' + diffInHoursToNow($item.updated_at) + '</label></td></tr>'

虽然它是有效的并且有时会有用,但您可能不想使用 $ 来启动您的 javascript 变量名称($key 和 $item)。这将有助于消除调用 php 函数的诱惑。