Вы не можете вернуть время из этой функции, если async имеет значение true. Вызов ajax является асинхронным. Он НЕ завершил вызов ajax, когда возвращается функция serverTime. Если вы хотите использовать возвращаемое время, вы должны вызвать функцию, которая будет использовать его, из функции успеха. Это очень распространенная ошибка - я, вероятно, писал об этом 10-15 раз за последние пару недель.
Если async имеет значение false, это должно работать, если браузер не кеширует ваш php-файл, хотя ваша страница будет блокироваться во время вызова ajax до тех пор, пока не вернется.
Если вы хотите на 100% убедиться, что ваш ajax-вызов никогда не вернет кэшированный результат, добавьте к нему случайную строку запроса, например, так, чтобы это всегда был уникальный URL:
cgi/server-time.php?random=83987569284
Вы можете создать случайное число следующим образом:
var php = "cgi/server-time.php?random=" + Math.floor(Math.random() * 10000000000);
Я бы порекомендовал использовать асинхронный ajax-вызов, добавить генерацию случайных чисел к URL-адресу, а затем, чтобы асинхронная работа работала, вы не можете использовать возвращаемое значение из serverTime, а скорее продолжать поток управления, вызывая функция из обработчика успеха.