PageRenderTime 47ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/tools/time.php

https://github.com/fb83/Project-Pier
PHP | 110 lines | 90 code | 8 blank | 12 comment | 13 complexity | 269b4ae2f0cf3cbe8177119022aa2f05 MD5 | raw file
Possible License(s): AGPL-1.0, GPL-2.0, AGPL-3.0, LGPL-2.1, GPL-3.0
  1. <?php ?><html>
  2. <body>
  3. <script type="text/javascript">
  4. function formatDate(date, fmt) {
  5. function pad(value) {
  6. return (value.toString().length < 2) ? '0' + value : value;
  7. }
  8. return fmt.replace(/%([a-zA-Z])/g, function (_, fmtCode) {
  9. switch (fmtCode) {
  10. case 'Y':
  11. return date.getUTCFullYear();
  12. case 'M':
  13. return pad(date.getUTCMonth() + 1);
  14. case 'd':
  15. return pad(date.getUTCDate());
  16. case 'H':
  17. return pad(date.getUTCHours());
  18. case 'm':
  19. return pad(date.getUTCMinutes());
  20. case 's':
  21. return pad(date.getUTCSeconds());
  22. default:
  23. return 'Unsupported format code: ' + fmtCode;
  24. }
  25. });
  26. }
  27. function showtime() {
  28. document.getElementById('time').innerHTML = '%Y-%M-%dT%H:%m:%s';
  29. var dd = new Date();
  30. var cc = formatDate(dd, '%Y-%M-%dT%H:%m:%s');
  31. document.getElementById('time').innerHTML = cc;
  32. var cc2 = dd.getHours() + ':' + dd.getMinutes() + ':' + dd.getSeconds();
  33. document.getElementById('time2').innerHTML = cc2;
  34. }
  35. window.onload=showtime;
  36. </script>
  37. <?php
  38. echo '<xmp>';
  39. // ntp time servers to contact
  40. // we try them one at a time if the previous failed (failover)
  41. // if all fail then wait till tomorrow
  42. $time_servers = array("nist1.datum.com",
  43. "time-a.timefreq.bldrdoc.gov",
  44. "utcnist.colorado.edu");
  45. // a flag and number of servers
  46. $valid_response = false;
  47. $ts_count = sizeof($time_servers);
  48. // time adjustment
  49. // I'm in California and the clock will be set to -0800 UTC [8 hours] for PST
  50. // you will need to change this value for your region (seconds)
  51. $time_adjustment = 0;
  52. for ($i=0; $i<$ts_count; $i++) {
  53. $time_server = $time_servers[$i];
  54. echo "Trying server $time_server\n";
  55. flush();
  56. $fp = fsockopen($time_server, 37, $errno, $errstr, 30);
  57. if (!$fp) {
  58. echo "$time_server: $errstr ($errno)\n";
  59. echo "Trying next available server...\n\n";
  60. flush();
  61. } else {
  62. $data = NULL;
  63. while (!feof($fp)) {
  64. $data .= fgets($fp, 128);
  65. }
  66. fclose($fp);
  67. // we have a response...is it valid? (4 char string -> 32 bits)
  68. if (strlen($data) != 4) {
  69. echo "NTP Server {$time_server} returned an invalid response.\n";
  70. if ($i != ($ts_count - 1)) {
  71. echo "Trying next available server...\n\n";
  72. } else {
  73. echo "Time server list exhausted\n";
  74. }
  75. } else {
  76. $valid_response = true;
  77. break;
  78. }
  79. }
  80. }
  81. if ($valid_response) {
  82. // time server response is a string - convert to numeric
  83. $NTPtime = ord($data{0})*pow(256, 3) + ord($data{1})*pow(256, 2) + ord($data{2})*256 + ord($data{3});
  84. // convert the seconds to the present date & time
  85. // 2840140800 = Thu, 1 Jan 2060 00:00:00 UTC
  86. // 631152000 = Mon, 1 Jan 1990 00:00:00 UTC
  87. $TimeFrom1990 = $NTPtime - 2840140800;
  88. $TimeNow = $TimeFrom1990 + 631152000;
  89. $nc = date("c", $TimeNow);
  90. $sc = date("c");
  91. $s = time();
  92. echo "Time from $time_server = $nc (seconds $TimeNow)\n";
  93. echo "Time from server = $sc (seconds $s)\n";
  94. echo "UTC time from JavaScript</xmp><span id=time></span><xmp>";
  95. echo "Local time from JavaScript</xmp><span id=time2></span><xmp>";
  96. } else {
  97. echo "No time servers available.\n";
  98. }
  99. echo '</xmp>';
  100. ?>
  101. </body>
  102. </html><?php ?>