trochu to teraz "dziwnie" wygląda

[ujemna godzina

]
luknij w kodzie na:
(new Date()).getTime() + $dif - poszukaj gdzie to jest - tutaj masz obliczoną liczbę milisekund od "since the Unix Epoch (January 1 1970 00:00:00 GMT)" - tak więc dla Polski teraz masz poprawną wartość - jeśli Polska jest punktem odniesienia to rozumowanie Twoje idzie w dobrym kierunku ale....
aby to uporządkować policz tą wartość dla Polski
$pl = (new Date()).getTime() + $dif;
no i od tego odejmij te 6h - ale pomyśl jak ;p - pisałem , że tamto jest w milisekundach - więc:
$en = $pl - 6*60*60*1000;
no a teraz pasowało by mieć 2 różne daty czyli:
$data_pl = new Date($pl);
$data_en = new Date($en);
i analogicznie z godzinami itd... $godzina_pl... $godzina_en...
co do wyświetlania AM i PM sprawdzasz czy godziny >12 czy nie i jak pm to odejmujesz te 12 od wartości wyświetlanej godziny

...
lub jeszcze inaczej można puszczać funkcję z dodatkowym parametrem na przesunięcie i samo by liczyło - ale spróbuj pomyśleć trochu i przerobić to co masz - prędzej się nauczysz - już gotowca dostałeś i teraz dostosować go tylko musisz...
...co prawda mógłbym napisać gotową funkcję ale nie od tego jest to forum żeby dawać gotowce - na tym forum pomagamy - powyższy "gotowiec" otrzymałeś choć wszystko wcześniej napisalem jak na tacy co i do czego ale też pisałem, że musisz już sam cały kod dostosować...
pozdro