すべての PHP ライブラリを覚えているわけではないので、
擬似コード アルゴリズム:
AdjustTimeToGPS(gpsTime : 12HourTime, currentTime : DayAndTime, currentTimeZone : TimeZone) : DayAndTime
begin
gmtCurrentTime : DayAndTime := ConvertToGmt(currentTime, currentTimeZone);
gmtCurrent12HourTime : 12HourTime := 12HourFromDayAndTime(gmtCurrentTime);
gpsHour : Hour := GetHourFrom12HourTime(gpsTime); // hour is 0 to 11;
gmtCurrentHour : Hour := GetHourFrom12HourTime(gmtCurrent12Hour);
day : Day := GetDayFromDayAndTime(gmtCurrentTime);
isPm : Boolean = IsPM(gmtCurrentTime);
if (gmtCurrentHour == 0 AND gpsHour == 11)
begin
// we need to subtract 12 hours
isPm := Not(isPm);
if (isPM)
begin
// we looped. need to subtract a day
day := day - 1;
end
end
if (gmtCurrentHour == 11 AND gpsHour == 0)
begin
// we need to add 12 hours
isPm := Not(isPm);
if (Not(isPM))
begin
// we looped. need to add a day
day := day + 1;
end
end
return DayAndTimeFrom12Hour(gpsTime, isPM, day);
end