2015-11-20 300 views
4

在Laravel 5.1中,我试图获取created_at日期的毫秒时间戳以用于前端javascript。我怎样才能做到这一点?我此刻的查询是这样的:Laravel获取created_at以毫秒为单位的时间戳

$stats = User::where('created_at', '>=', $range) 
       ->groupBy('date') 
       ->orderBy('date', 'DESC') 
       ->get([ 
         DB::raw('Date(created_at) as date'), 
         DB::raw('COUNT(*) as value') 
        ]) 
       ->toJSON(); 

我想要的created_at输出是这样的:1325356200000

回答

2

如果你细使用DB::raw你可以尝试像DB::raw("CONCAT(UNIX_TIMESTAMP(DATE(created_at)), '000000') as date")

+0

谢谢@svmm我得到的SQL语法错误违反说'UNIXTIMESTAMP不存在'。有没有一种方法可以使用纯粹的Eloquent方法使用'DB:raw'来执行相同的操作? – Neel

+0

对不起,它是'UNIX_TIMESTAMP' – svrnm

+0

这很完美。有用!谢谢@svmm。我可以在没有'DB :: raw'的情况下做类似的事情吗?我认为'DB :: raw'是最简单的方法,我是这么想的吗? – Neel

2

您可以为created_at字段创建自定义accessor,并将日期时间转换为时间戳。

+0

...然后,这将在其他地方破碎'created_at'被使用并且预计将成为'Carbon'实例。 –

+0

@MartinBean我不认为@JackPoint意味着覆盖“created_at”访问器,只是定义一个新的访问者,例如。 '公共函数getCreatedAtMilsAttribute()' –

1

@你在使用Laravel时,你已经有一个很好的工具,叫做Carbon,用于处理PHP DateTime类。没有必要为您的目的使用UNIX_TIMESTAMP,这不是一个好主意。

正如你可以在Laravel documentation中找到的那样,created_atupdated_at是默认的Carbon实例。所以,你可以得到时间戳这样也much more

User::findOrFail($id)->created_at->timestamp 

如果你

"created_at" => "2015-10-07 06:10:49" 

结果将使用上面的查询这样1444198249

之后产生的时间戳,你可以操纵你的结果如你所愿。

相关问题