Hmmm... without JavaScript, both the gizmo and the dashboard show the same time (from VWStags.php).
With JavaScript enabled, the gizmo is -3 hours from what the dashboard says (as you have observed).
The ajaxVWSwx.js script has
var wflash = x.responseText.split(',');
// now make sure we got the entire wflash.txt -- thanks to Johnnywx
// valid wflash.txt has 'F=nnnnnnnnnn'
var wdpattern=/F\=(\d+)/;
if( wdpattern.test(wflash[0]) &&
( updates <= maxupdates || maxupdates > 0 )) { // got it.. process wflash.txt
if (maxupdates > 0 ) {updates++; } // increment counter if needed
// main routine ---
var datestamp = wflash[0]; // extracted from the F=() in the first string
// Note: F=nnnnn: the value is number of seconds since Jan 01, 1900 00:00:00 UTC
datestamp = datestamp.replace(/^I=\S+\&/i,""); // remove I= field if present
datestamp = datestamp.replace(wdpattern,"$1"); // extract timestamp from F=nnnnnnnn field
var datezero = new Date('Jan 01, 1900 00:00:00 UTC');
var datetime = new Date();
datetime.setTime(datestamp*1000 + datezero.getTime()); // adjust date to offset from zero time
set_ajax_obs("ajaxdatetime",datetime);
set_ajax_obs("ajaxdatetimelocale",datetime.toLocaleString());
set_ajax_obs("ajaxdate",datetime.toLocaleDateString());
set_ajax_obs("ajaxtime",datetime.toLocaleTimeString());
set_ajax_obs("gizmodate",datetime.toLocaleDateString());
set_ajax_obs("gizmotime",datetime.toLocaleTimeString());
to process the (somewhat funky) timestamp from the wflash.txt.
ajax-gizmo.php has
<span class="ajax" id="gizmodate"><?php echo $UpdateDate;?></span>
<span class="ajax" id="gizmotime"></span>
to display the date, time.
ajax-dashboard.php has
<span class="ajax" id="ajaxindicator"><?php langtrans('Updated'); ?>:</span> @
<span class="ajax" id="ajaxdate">
<?php echo fixup_date($date) . ' ' . fixup_time($time);
if(isset($timeofnextupdate)) { echo " - " . langtransstr('next update at') . " " . fixup_time($timeofnextupdate);} ?>
</span> <span class="ajax" id="ajaxtime"></span>
Since the ajaxVWSwx.js sets both ajaxdate/gizmodate and ajaxtime/gizmotime IDs using the same logic, they should appear as the same values when the script runs (or so one would think).
Watching the execution with Firefox FireBug shows in the gizmo area
<span id="gizmodate" class="ajax" lastobs="4/28/16" style="color: rgb(0, 204, 0);">4/28/16</span>
<span id="gizmotime" class="ajax" lastobs="8:08:40 AM" style="color: rgb(0, 204, 0);">8:08:40 AM</span>
while in the dashboard area it shows
<span id="ajaxindicator" class="ajax" style="color: rgb(0, 204, 0);">Updated:</span>
@
<span id="ajaxdate" class="ajax" lastobs="4/28/16" style="color: rgb(0, 204, 0);">4/28/16</span>
<span id="ajaxtime" class="ajax" lastobs="11:08:40am" style="color: rgb(0, 204, 0);">11:08:40am</span>
so... how did gizmotime get 3 hours behind ajaxtime when they come from the same code
set_ajax_obs("ajaxtime",datetime.toLocaleTimeString());
set_ajax_obs("gizmotime",datetime.toLocaleTimeString());
I looked through all the JavaScripts loaded by the page, and can't find any other part that uses 'datetime' variable, or tries to replace 'gizmotime'.
I'll keep looking though... it is a puzzle.