如果我正在构建一个时区感知的Laravel(Lumen)应用程序,用户可能无法控制其数据库时区设置,但可以在配置中为我的应用程序提供自定义时区。
我还需要能够通过第三方应用程序中的直接连接在数据库中存储时间戳(再次记住数据库配置中的时区可能不正确)所以我认为unix时间戳是合适的所以我可以在我的第三方直接连接中使用UNIX_TIMESTAMP(NOW())
。
我应该以unix整数格式存储时间戳吗?
自$table->timestamps();
使用TIMESTAMP
当我查询数据库以将json输出到API时,如何确保日期/时间自动转换为Laravel配置中指定的时区?
注意:我不打算转换为多个时区,只是.env中的那个
当前.env
APP_TIMEZONE=UTC
当前迁移示例
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateSharesTable extends Migration
{
public function up()
{
Schema::create('shares', function (Blueprint $table) {
$table->increments('id');
$table->string('url', 500);
$table->string('description', 100);
$table->integer('hits');
$table->string('ip_address', 39);
$table->timestamps();
});
}
当前分享模式
namespace App;
use Illuminate\Database\Eloquent\Model;
class Share extends Model
{
protected $fillable = ['url', 'description', 'ip_address'];
protected $hidden = ['ip_address'];
}
当前控制器示例
namespace App\Http\Controllers;
use App\Share;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
class ShareController extends Controller
{
/**
* @SWG\Get(
* tags={"Shares"},
* path="/shares",
* summary="Finds all shares",
* description="Returns all shares ",
* @SWG\Response(
* response=200,
* description="A list of all shares"
* )
* )
*/
public function fetchAll()
{
return Share::get();
}
答案 0 :(得分:1)
您可以使用config\app.php
代替.env
config(['app.timezone' => $timezone]);
$timezone
就是其中之一:http://php.net/manual/en/timezones.php
我应该以unix整数格式存储时间戳吗?
你可以,但iso8601是一个ISO标准,所以为什么不呢
从那以后,在Laravel全球支持这项工作的最佳方法是什么? $表 - >时间戳();使用TIMESTAMP
Carbon是处理时间戳,添加和减少时间的好方法。使用上面的代码更改时区并在Carbon中使用它们。
如何确保日期/时间自动转换为时区 在我查询数据库输出时在Laravel配置中指定 json到API?
如果你在一个可以在请求之间保存的会话中设置时区,或者如果你将每个请求传递给它作为参数,那么这就是Laravel将为你处理的事情。