Если я создаю приложение Laravel (Lumen), посвященное часовому поясу, где пользователь может не контролировать свои настройки часового пояса базы данных, но может предоставить мое приложение с настраиваемым часовым поясом в конфигурации.Пользовательская поддержка часового пояса в Laravel/Lumen
Я также должен иметь возможность хранить временные метки в базе данных через прямое соединение в стороннем приложении (снова помните, что часовой пояс может быть неправильным в конфигурации базы данных), поэтому я думаю, что временная метка unix будет подходящей Я могу использовать UNIX_TIMESTAMP(NOW())
в прямом подключении третьей стороны.
Должен ли я хранить метки времени в формате unix integer?
Что такое лучший способ поддержать это глобально в Laravel поскольку
$table->timestamps();
использует TIMESTAMPКак обеспечить дату/время автоматически преобразуются в часовой пояс, указанный в конфигурации Laravel, когда запрос к базе данных для вывода json для API?
Примечание: Я не ищу, чтобы перевести на несколько часовых поясов, только один в .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();
});
}
Current Share модель
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();
}
Если бы я использовал NOW() из моего прямого прямого соединения db, но вставлял TIMESTAMP на основе настроек часового пояса базы данных. Поэтому я не должен хранить все в временных отметках unix, чтобы гарантировать, что как прямое соединение третьей стороны, так и Laravel вставляют их в один и тот же «часовой пояс» (UTC). – Titan
Я буду хранить все, как UTC https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC И они на лету отображают временные метки в соответствии с часовым поясом посетителей, используя углерод, у вас есть эта информация в php или используйте moment.js как последнее средство, когда вы получаете информацию из браузера (http://stackoverflow.com/questions/1091372/getting-the-clients-timezone-in-javascript) –
Только что я понял, что могу использовать 'UTC_TIMESTAMP()' из моего прямое подключение третьей стороны – Titan