Vra

Vir diegene van ons wat standaard gebruik shared hosting pakkette, soos GoDaddy of Network Solutions, hoe hanteer jy DATETIME doelskoppe wanneer jou hosting bediener (PHP) en MySQL bediener is in die verskillende tydsones?

Ook nie enigiemand het 'n paar beste praktyke advies vir die bepaling van watter tydsone n besoeker aan jou webwerf is in en manipuleer n datum tyd veranderlike gepas?

Was dit nuttig?

Oplossing

As van PHP 5.1.0 jy kan gebruik < em> date_default_timezone_set () funksie om die standaard tydsone wat gebruik word deur al die datum / tyd funksies in 'n script te stel.

Vir MySql (aangehaal uit MySQL bediener Tydsone Support bladsy)

  

Voor MySQL 4.1.3 Die bediener bedryf net in die stelsel tydsone stel op opstart. Begin met MySQL 4.1.3 Die bediener handhaaf verskeie tydsone instellings, waarvan sommige kan verander tydens looptyd.

van belang vir jou is per-verbinding opstel van die tydsones, wat jy sal gebruik aan die begin van jou skrifte

SET timezone = 'Europe/London';

As vir die opsporing van die kliënt tydsone stel, jy kan 'n bietjie van JavaScript gebruik om te kry en te red wat inligting aan 'n koekie, en gebruik dit op die daaropvolgende bladsy lees, om die behoorlike tydsone bereken.

//Returns the offset (time difference) between Greenwich Mean Time (GMT) 
//and local time of Date object, in minutes.
var offset = new Date().getTimezoneOffset(); 
document.cookie = 'timezoneOffset=' + escape(offset);

Of jy kan gebruikers aan te bied die chioce hul tydsones hulself op te rig.

Ander wenke

Store alles as UTC. Jy kan doelskoppe doen by die kliënt vlak, of op die bediener kant met behulp van kliënt instellings.

php - datum

mysql - utc- tyd stempel

RE die antwoord van Željko Zivkovic, tydsone beskrywers soos Europa / Londen 'werk slegs indien die MySQL admin die tydsone tafels het bygedra tot die stelsel, en hou hulle opgedateer.

Andersins jy is beperk tot numeriese skyf soos '-4: 00. Gelukkig het die PHP date ( 'P') formaat bied dit (as van 5.1.3)

So in seggenskap n app konfigurasie lêer wat jy mag hê

define('TZ', 'US/Pacific');
....
if (defined('TZ') && function_exists('date_default_timezone_set')) {
    date_default_timezone_set(TZ);
    $mdb2->exec("SET SESSION time_zone = " . $mdb2->quote(date('P')));
}

Dit beteken PHP en MySQL sal saamstem oor wat tydsone verreken om te gebruik.

Gebruik altyd TIMESTAMP vir die berging van tyd waardes . Die kolom is eintlik gestoor as UNIX_TIME (epog), maar implisiet omgeskakel vanaf huidige TIME_ZONE verreken wanneer geskryf en terug wanneer lees.

As jy wil keer vertoon vir gebruikers in ander tydsones, dan in plaas van 'n globale definieer (), stel hulle gegee tydsone in die bogenoemde. TIMESTAMP waardes sal outomaties omgeskakel word deur MySQL teen die tyd dat jou app sien die resultaat stel (wat soms 'n probleem kan wees, as jy nodig het om werklik te weet wat die oorspronklike tydsone van die gebeurtenis te dan dit moet wees in 'n ander kolom)

en so ver as, "hoekom nie net alle tye as int se stoor", wat beteken jy verloor die vermoë om te vergelyk en te bekragtig datums, en beteken dat jy altyd het om te sit op datum verteenwoordiging op die app vlak (en is hard op die oë wanneer jy op soek is na die data direk - vinnige, wat gebeur het by 1254369600)

Ek red al my datums as 'n bigint as gevolg van probleme met die datum Tyd tipe voor gehad het. Ek red die gevolg van die tyd () PHP funksie daarin, nou tel hulle as in dieselfde tydsone:)

In php stel tydsone deur in die php.ini lêer:     ini_set("date.timezone", "America/Los_Angeles");

of in die besonder bladsy wat jy kan doen soos:     date_default_timezone_set("America/Los_Angeles");

In mysql kan jy doen soos:    SET GLOBAL time_zone = 'America/Los_Angeles';

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top