A partir do PHP 5.1.0 você pode usar date_default_timezone_set() função para definir o fuso horário padrão usado por todas as funções de data/hora em um script.
Para MySQL (citado de Suporte de fuso horário do MySQL Server página)
De interesse para você é a configuração por conexão dos fusos horários, que você usaria no início de seus scripts
SET timezone = 'Europe/London';
Quanto à detecção da configuração de fuso horário do cliente, você pode usar um pouco de JavaScript para obter e salvar essas informações em um cookie e usá-las em leituras de página subsequentes para calcular o fuso horário adequado.
//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);
Ou você pode oferecer aos usuários a opção de definir seus próprios fusos horários.