2020-06-27 19:16:43 +00:00
const maxtimestamp = 2147483647 ;
var readable _timer _mode = 0 ;
2021-08-16 20:04:38 +00:00
var msec _display = true ;
2022-01-31 19:41:53 +00:00
var fullscreen = false ;
2022-02-01 11:02:10 +00:00
var other _counters = [
2022-01-31 19:41:53 +00:00
[ "UNIX unsinged 32-bit timestamp" , "UNIX 32 бита без знака" , 0 , 4294967295 ] ,
[ "FAT filesystems timestamps" , "Штампы времени файловой системы FAT" , 351907200 , 4354819200 ] ,
2022-02-01 11:02:10 +00:00
[ "ext4 filesystems timestamps" , "Штампы времени файловой системы ext4" , - 2147470217 , 17176838400 ] ,
[ "NTFS filesystems timestamps" , "Штампы времени файловой системы NTFS" , - 11644473600 , 1833029913600 ] ,
// ["Year 32,768 bug", "Проблема 32 768 года", -62167219200, 971890963200],
// ["Year 65,536 bug", "Проблема 65 536 года", -62167219200, 2005949145600],
2022-01-31 19:41:53 +00:00
[ "UNIX singed 64-bit timestamp" , "UNIX 64 бита с о знаком" , 0 , 9223372036854775807 ] ,
[ "UNIX unsinged 64-bit timestamp" , "UNIX 64 бита без знака" , 0 , 18446744073709551615 ] ,
] ;
var language _user = window . navigator ? ( window . navigator . language ||
window . navigator . systemLanguage ||
window . navigator . userLanguage ) : "ru" ;
language _user = language _user . substr ( 0 , 2 ) . toLowerCase ( ) ;
language _site = ( language _user == "ru" || language _user == "by" || language _user == "ua" ) ? "ru" : "en" ;
2020-06-27 19:16:43 +00:00
function ReadableTimerSwitcher ( ) {
readable _timer _mode ++
2020-07-03 12:53:13 +00:00
if ( readable _timer _mode > 2 ) { readable _timer _mode = 0 }
}
2020-07-03 16:11:24 +00:00
addEventListener ( "fullscreenchange" , ( event ) => {
2022-01-31 19:41:53 +00:00
if ( ! fullscreen ) {
$ ( "#style" ) . attr ( "href" , "fullscreen-style.css" ) ;
$ ( "#description_en" ) . css ( "display" , "none" ) ;
$ ( "#description_ru" ) . css ( "display" , "none" ) ;
fullscreen = true ;
2020-07-03 12:53:13 +00:00
} else {
2022-01-31 19:41:53 +00:00
$ ( "#style" ) . attr ( "href" , "style.css" ) ;
languageSwitcher ( language _site )
fullscreen = false ;
2020-07-03 12:53:13 +00:00
}
2020-07-03 16:11:24 +00:00
} )
2022-01-31 19:41:53 +00:00
function languageSwitcher ( lang _code ) {
switch ( lang _code ) {
case "ru" :
$ ( "#title_en" ) . css ( "display" , "none" ) ;
$ ( "#title_ru" ) . css ( "display" , "block" ) ;
$ ( "#description_en" ) . css ( "display" , "none" ) ;
$ ( "#description_ru" ) . css ( "display" , "block" ) ;
$ ( "#me_tg_en" ) . css ( "display" , "none" ) ;
$ ( "#me_tg_ru" ) . css ( "display" , "" ) ;
language _site = "ru" ;
break ;
case "en" :
$ ( "#title_ru" ) . css ( "display" , "none" ) ;
$ ( "#title_en" ) . css ( "display" , "block" ) ;
$ ( "#description_ru" ) . css ( "display" , "none" ) ;
$ ( "#description_en" ) . css ( "display" , "block" ) ;
$ ( "#me_tg_ru" ) . css ( "display" , "none" ) ;
$ ( "#me_tg_en" ) . css ( "display" , "" ) ;
language _site = "en" ;
break ;
}
}
languageSwitcher ( language _site ) ;
2021-08-16 20:04:38 +00:00
function msecDisplaySwitcher ( ) {
if ( msec _display ) {
msec _display = false
$ ( "#time-left-msec" ) . css ( "display" , "none" ) ;
} else {
msec _display = true
$ ( "#time-left-msec" ) . css ( "display" , "unset" ) ;
}
}
2020-06-26 11:52:22 +00:00
function Cycle ( ) {
var timestamp = Date . now ( ) / 1000 ,
left = maxtimestamp - timestamp ,
2021-08-16 20:04:38 +00:00
lmsec = Math . floor ( left * 1000 ) % 1000 ,
2020-06-27 19:16:43 +00:00
t = Math . floor ( left ) ;
2021-08-16 20:04:38 +00:00
$ ( "#time-left" ) . html ( t . toLocaleString ( 'ru' ) ) ;
$ ( "#time-left-msec" ) . html ( "." + ( "00" + lmsec ) . slice ( - 3 ) )
2020-06-26 11:52:22 +00:00
$ ( "#prog" ) . val ( timestamp ) ;
2022-01-31 19:41:53 +00:00
$ ( "#timestamp_ru" ) . html ( Math . trunc ( timestamp ) . toLocaleString ( 'ru' ) ) ;
$ ( "#timestamp_en" ) . html ( Math . trunc ( timestamp ) . toLocaleString ( 'ru' ) ) ;
2020-07-03 12:53:13 +00:00
if ( left < 60 && readable _timer _mode != 2 ) { $ ( "#time-left-readable" ) . css ( "display" , "none" ) }
2020-06-26 11:52:22 +00:00
if ( left <= 0 ) {
clearInterval ( c ) ;
2021-08-16 20:04:38 +00:00
$ ( "#time-left" ) . html ( "0" ) ;
$ ( "#time-left-msec" ) . html ( "000" )
2020-06-26 11:52:22 +00:00
$ ( "#title" ) . html ( "С͓̪̩̳͕͍̄ͮͤ̚̚м̦͎͉̝̋̄е̥͕̫̫̱̱͓̞̾р̞̤̰͖̤̟̫͓̏̍͒ͣ͐͂̚ͅт̗̥̲̩̣̯̹̅ͅь̙͍̟̟̮̩̦̹ͩͤ" ) ;
}
2020-06-27 19:16:43 +00:00
switch ( readable _timer _mode ) {
case 0 :
var tsec = Math . floor ( left % 60 ) ,
tmin = Math . floor ( left / 60 ) % 60 ,
thour = Math . floor ( left / 60 / 60 ) % 24 ,
tday = Math . floor ( left / 60 / 60 / 24 ) ;
$ ( "#time-left-readable" ) . html ( "(" + tday + ":" + ( "0" + thour ) . slice ( - 2 ) + ":" + ( "0" + tmin ) . slice ( - 2 ) + ":" + ( "0" + tsec ) . slice ( - 2 ) + ")" ) ;
break ;
case 1 :
var tsec = Math . floor ( left % 60 ) ,
tmin = Math . floor ( left / 60 ) % 60 ,
thour = Math . floor ( left / 60 / 60 ) % 24 ,
tday = Math . floor ( left / 60 / 60 / 24 ) % 365 ,
tyear = Math . floor ( left / 60 / 60 / 24 / 365 ) ;
2022-01-31 19:41:53 +00:00
switch ( language _site ) {
case "ru" :
$ ( "#time-left-readable" ) . html ( "(" + tyear + " л. " + tday + " дн. " + ( "0" + thour ) . slice ( - 2 ) + ":" + ( "0" + tmin ) . slice ( - 2 ) + ":" + ( "0" + tsec ) . slice ( - 2 ) + ")" ) ;
break ;
case "en" :
$ ( "#time-left-readable" ) . html ( "(" + tyear + " y. " + tday + " d. " + ( "0" + thour ) . slice ( - 2 ) + ":" + ( "0" + tmin ) . slice ( - 2 ) + ":" + ( "0" + tsec ) . slice ( - 2 ) + ")" ) ;
break ;
}
2020-06-27 19:16:43 +00:00
break ;
2020-07-03 12:53:13 +00:00
case 2 :
var precentage = ( timestamp / maxtimestamp ) * 100 ;
$ ( "#time-left-readable" ) . html ( Math . trunc ( timestamp ) . toLocaleString ( 'ru' ) + " / " + maxtimestamp . toLocaleString ( 'ru' ) + " (" + precentage . toFixed ( 8 ) + "%)" ) ;
break ;
2020-06-27 19:16:43 +00:00
}
2022-01-31 19:41:53 +00:00
let other _counters _html = ( language _site == "ru" ) ? "<h3>Другие, более далёкие проблемы времени в вычислительной технике</h3>" : "<h3>Other, more distant time problems in computing</h3>" ;
other _counters . forEach ( element => {
l = element [ 3 ] - timestamp ;
other _counters _html = other _counters _html + '<div id="other_counter"><h4>' + element [ ( language _site == "ru" ) ? 1 : 0 ] + '</h4><span style="font-size: 2rem; font-family: \'7Digital\'">' + Math . trunc ( l ) . toLocaleString ( 'ru' ) +
'</span><div class="othr_progress" style="float: right">' + new Date ( element [ 3 ] * 1000 ) . toUTCString ( ) + " · " + ( ( ( timestamp - element [ 2 ] ) / ( element [ 3 ] - element [ 2 ] ) ) * 100 ) . toFixed ( 8 ) . toString ( ) +
'% · ' + Math . floor ( l / 60 / 60 / 24 / 365 ) . toLocaleString ( 'ru' ) + ( ( language _site == "ru" ) ? " л. " : " y. " ) + ( Math . floor ( l / 60 / 60 / 24 ) % 365 ) . toString ( ) + ( ( language _site == "ru" ) ? " дн. " : " d. " ) +
( "0" + ( Math . floor ( l / 60 / 60 ) % 24 ) ) . slice ( - 2 ) + ':' + ( "0" + ( Math . floor ( l / 60 ) % 60 ) ) . slice ( - 2 ) + ':' + ( "0" + ( Math . floor ( l ) % 60 ) ) . slice ( - 2 ) + '</div>' + '</div>' ;
} ) ;
$ ( "#other_countdowns" ) . html ( other _counters _html )
2020-06-26 11:52:22 +00:00
}
2022-01-31 19:41:53 +00:00
var c = setInterval ( Cycle , 1000 / 15 ) ;