In effetti ciò che bisognerebbe fare è caricare la differenze di fuso orario prima che intervenga localtime:
$fuso = 3600 * <numero ore di differenza>;
localtime(time + $fuso);
se invece ti serve qualcosa di più completo scrivimi una mail in modo che abbia il tuo indirizzo. Ti invio una subroutine che fa tutte queste funzioni. Prossimamente la pubblicherò sul mio sito con la guida all'uso, ma se vuoi te la anticipo.