This is an old revision of the document!


Swatch Internet Time / .beat Time

<fs xx-large> @000 <script defer src=“https://melonking.net/scripts/swatchTime.js”></script> </code> JavaScript - Full Code <code> Returns the current Swatch beat function GetSwatchTime(showDecimals = true) { get date in UTC/GMT var date = new Date(); var hours = date.getUTCHours(); var minutes = date.getUTCMinutes(); var seconds = date.getUTCSeconds(); var milliseconds = date.getUTCMilliseconds(); add hour to get time in Switzerland hours = hours == 23 ? 0 : hours + 1; time in seconds var timeInMilliseconds = 1)

1)
hours * 60 + minutes) * 60 + seconds) * 1000 + milliseconds;
  // there are 86.4 seconds in a beat
  var millisecondsInABeat = 86400;
  // calculate beats to two decimal places
  if (showDecimals) {
      return Math.abs(timeInMilliseconds / millisecondsInABeat).toFixed(2);
  } else {
      return Math.floor(Math.abs(timeInMilliseconds / millisecondsInABeat));
  }
} </code> If you want it to display on your webpage and auto-update here is an example - first, we make a span with an id, this is where the clock will appear on your page - then we get that span in a script, make a function that fills it with the swatch time, and finally, we set it to reload every microbeat.
<span id="mySwatchClock"></span>
<script>
    var mySwatchClock = document.getElementById('mySwatchClock');
    function updateSwatchClock() {
        mySwatchClock.innerHTML = '@' + GetSwatchTime();
    }
    setInterval(updateSwatchClock, 864);
</script>
==== PHP: ==== PHP has native support for Swatch time, you can get the latest beat using this snippet:
$swatchTime = date('B'); //000-999
However if you would like a full function that also shows microbeats, we have that too!
// Returns the current Swatch beat
function GetSwatchTime($showDecimals = true)
{
    // Get time in UTC+1 (Do not Change!)
    $now = new DateTime("now", new DateTimeZone("UTC"));
    $now->add(new DateInterval("PT1H"));
    // Calculate the seconds since midnight e.g. time of day in seconds
    $midnight = clone $now;
    $midnight->setTime(0, 0);
    $seconds = $now->getTimestamp() - $midnight->getTimestamp();
    // Swatch beats in seconds - DO NOT CHANGE
    $swatchBeatInSeconds = 86.4;
    // Calculate beats to two decimal places
    if ($showDecimals) {
        return number_format(round(abs($seconds / $swatchBeatInSeconds), 2), 2);
    } else {
        return floor(abs($seconds / $swatchBeatInSeconds));
    }
}
==== BASH: ==== (note that Etc timezones are inverted) Calculating Beat Time in bash is simple:
MIDNIGHT=$( TZ='Etc/GMT-1' date -d "12:00 am" +%s )
BTIME=$(( (($EPOCHSECONDS - $midnight) * 1000)  / 86400 ))
echo @$BTIME
However, you need to use an external program to calculate centibeats, since bash does not handle decimals well: (using dc, which is a rpn calculator)
MIDNIGHT=$( TZ='Etc/GMT-1 date -d "12:00 am" +%s )

printf @
dc << EOF
# setting precision
2 k
# subtracting midnight from the current epoch
$EPOCHREALTIME $MIDNIGHT -
# converting to ms
1000 *
# divide by seconds in a day
86400 /
# print it to screen
p
EOF
To display it on your screen permanently, you can use any program that uses piped input, but lemonbar is the easiest to use:
while true
do
  MIDNIGHT=$( TZ='Etc/GMT-1' date -d "12:00 am" +%s )
  BTIME=$(( (($EPOCHSECONDS - $midnight) * 1000)  / 86400 ))
  echo @$BTIME
done | lemonbar -bg 48+0+18  # positions a little above the bottom left
(you can replace the code between the do and done with the dc version too)