【问题标题】:Get Swatch Internet Time using javascript (and PHP)使用 javascript(和 PHP)获取 Swatch Internet 时间
【发布时间】:2013-02-20 19:16:27
【问题描述】:

我想让我的用户能够选择Swatch Internet Time 作为他们的时间格式。

我现在的尝试:

function startTime(){
    var d = new Date(),
        h = d.getHours(),
        m = d.getMinutes(),
        s = d.getSeconds(),
        time = "@"+parseFloat((h*3600+m*60+s*1)*0.01157,10).toString().replace(/(\.\d{1,2})\d*$/, "$1");

    $('#time').html(time);
}

根据描述,swatch时间是无时区偏移的,所以使用用户的系统时间是行不通的。

我能想到的另一种方法是向 php 文件发送一个 ajax 请求,该文件通过内置的date('B') 函数返回当前样本时间,但是我不能使用 2 位小数,而且它会产生不必要的流量.

$.ajax({type:'GET',url:'../time.php'}).done(function(data){ var time = data });

时间.php:

<?php echo date("B") ?>

必须有某种方式以@###.## 格式返回样本时间,我很想知道。

startTime() 函数是使用setInterval(startTime,750) 调用的,所以我需要一个可以在那个时间段内工作的解决方案。

【问题讨论】:

  • 仅供参考:是的,手表制造商中的 Swatch...en.wikipedia.org/wiki/Swatch_Internet_Time
  • @ficuscr 问题中已经链接了...
  • 老亲爱的时间戳呢?该死的营销
  • 这只是一种营销策略,没有标准化的函数、转换器或 API,并且时间分为节拍,使用十进制系统,而不是每分钟 60 秒,每分钟 60 分钟小时等,这使得制作真正有效的东西成为一项艰巨的工作。
  • 用这个怎么样? themactep.com/beats/js

标签: php javascript jquery time


【解决方案1】:

JavaScript 有一个函数 .getTimezoneOffset(),它以分钟为单位返回与 GMT 的偏移量。

只需将瑞士比尔时区偏移(+60 分钟)减去当地时区偏移即可。差异应该是为您提供 Swatch 时间的偏移量。然后据此进行节拍计算。

您也可以只使用.getUTCHours().getUTCMinutes() 等,基本上是格林威治标准时间。格林威治标准时间比瑞士比尔早一小时。因此,您只需在计算中添加一个小时即可获得 Swatch 时间。

演示:http://jsfiddle.net/qF8Bt/

【讨论】:

    【解决方案2】:

    我想让@JohnBoker 在 cmets 中提出的解决方案更加明显。由 Paul Philippov 编写的 JavaScript Date class extension,我一直在使用它。该方法采用一个参数,该参数指定要返回的小数位数。

    function startTime(){
        var d = new Date(),
            time = d.toInternetTime(2);
    
        $('#time').html(time);
    }
    setInterval(startTime,500);
    

    在下面试试:

    function startTime() {
        var d = new Date(),
            time = d.toInternetTime(2);
        
        $('#time').html(time);
    }
    setInterval(startTime, 500)
    body{margin:0}#time{font-family:monospace;display:block;width: 100%;font-size:2em;height:2em;display:block;text-align:center;position:absolute;top:calc(50% - 1em)}
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="https://themactep.com/js/ppds.date.js"></script>
    <span id=time></span>

    【讨论】:

    • 本作品在 BSD 许可下。见原文file
    【解决方案3】:

    我只是有一个理由写一个样本节拍函数,所以将在这里发布以供后代使用:

    function getSwatchBeat(date, places = 3) {
      return (((+date + 3.6e6) % 8.64e7) / 8.64e4).toFixed(places);
    }
    
    let d = new Date();
    console.log(`Current swatch beat for ${d.toLocaleString()} is ${getSwatchBeat(d, 1)}`);

    它只是将 UTC 时间增加 1 小时以适应 Biel,然后除以一天的千分之一。我不知道 PHP 函数返回多少位小数,但很容易调整。

    【讨论】:

      猜你喜欢
      • 2011-05-25
      • 2017-11-03
      • 2012-04-15
      • 1970-01-01
      • 2013-07-02
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多