Javascript 正在查找要查询当前时间的YQL表

Javascript 正在查找要查询当前时间的YQL表,javascript,datetime,yql,Javascript,Datetime,Yql,我正在尝试为网页构建一个简单的时钟小部件。我想使用YQL来查询使用Yahoo这是桌子。我找不到允许我根据位置查询当前时间的表 我认为weather.forecast表将包含时间,因为人们可以根据当前时间找到特定位置的天气 有人能告诉我去雅虎的路吗!包含指定位置的时间的表?没有通过Yahoo提供时间的内置YQL表 作为一种替代方法,尤其是当您询问一个网站小部件时,您可以在这里查看基于HTML、JavaScript和GeoNames API的答案:最简单的解决方案可能是使用YQL直接获取本地时间,具

我正在尝试为网页构建一个简单的时钟小部件。我想使用YQL来查询使用Yahoo这是桌子。我找不到允许我根据位置查询当前时间的表

我认为weather.forecast表将包含时间,因为人们可以根据当前时间找到特定位置的天气


有人能告诉我去雅虎的路吗!包含指定位置的时间的表?

没有通过Yahoo提供时间的内置YQL表


作为一种替代方法,尤其是当您询问一个网站小部件时,您可以在这里查看基于HTML、JavaScript和GeoNames API的答案:

最简单的解决方案可能是使用YQL直接获取本地时间,具体取决于您传递查询的时区代码。例如,以下是获取新加坡中士时间的服务电话:

https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Fwww.worldtimeserver.com%2Ftime-zones%2Fsgt%2F%22%20and%20xpath%3D%22%2F%2Fspan%5B%40id%3D'theTime'%5D%22&format=json&callback=
这将产生以下查询:

select * from html
where url="http://www.worldtimeserver.com/time-zones/sgt/"
and xpath="//span[@id='theTime']"
您可以创建一个包装器函数,该函数接受时区代码,并用传递给它的任何参数替换sgt以获取本地时间

注意:如果您的站点获得大量流量,那么在使用jQuery的$.ajax方法请求JSON时要小心,因为您可能会超过YQL的速率限制,这可能会导致您被禁止

如果您不喜欢抓取网站,那么您可以创建自己的开放数据表,并在块中使用JavaScript自己进行时间操作。例如,我刚刚拼凑了一个非常简单的表格来演示:

<?xml version="1.0" encoding="UTF-8"?>
<table xmlns="http://query.yahooapis.com/v1/schema/table.xsd">
  <meta>
    <sampleQuery>select * from {table} where timezone="SGT";</sampleQuery>
    <description>Return the current date and time for a given time zone.</description>
  </meta>
  <bindings>
    <select itemPath="" produces="XML">
      <inputs>
        <key id="timezone" type="xs:string" paramType="variable" required="true"/>
      </inputs>
      <execute>
      <![CDATA[
      /*** NOTE: This does NOT handle Daylight Saving Time (DST) ***/

      var nOffset;
      switch(timezone.toUpperCase()) {
        case 'SGT':
          nOffset = 8;
          break;
        /* Add a case for every time zone (see http://www.timeanddate.com/time/zones/) */
      }

      // Based on http://www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329/
      function calcTime(offset) {
        // Create Date object for current location
        var d = new Date();
        // Convert to ms, add local time zone offset, and get UTC time
        var utc = d.getTime() + (d.getTimezoneOffset()*60000);
        // Return date string for supplied time zone
        return new Date(utc + (3600000*offset)).toLocaleString('en-US');
      }

      // This won't work in ECMAScript for XML (E4X):
      // var sDateTime = new Date().toLocaleString('en-US', { timeZone:'Asia/Singapore' });
      var sDateTime = calcTime(nOffset),
        aDateTime = sDateTime.match(/(.+, \d+) (\d.+(?:AM|PM))/),
        sDate = aDateTime[1],
        sTime = aDateTime[2],
        xml =
          <datetime>
            <date>{sDate}</date>
            <time>{sTime}</time>
          </datetime>;
      // Add attribute
      xml.@['timezone'] = timezone;
      response.object =  xml;
      ]]>
      </execute>
    </select>
  </bindings>
</table>
如果你走这条路,那么你需要把所有的时区都映射到他们的UTC报价上,并添加逻辑来处理夏令时DST

对于YQL新手,下面介绍如何使用开放数据表:

去医院。 将上面的代码粘贴到编辑器中,然后单击“保存”。 单击Console选项卡。 单击展开“我的YQL”部分;在“表”下,单击刚刚保存的表。 在YQL语句框中,您应该看到如下内容: 用作;描述。 将desc替换为以下语句: 选择*从其中时区=SGT 选择您想要的XML或JSON响应格式,然后单击Test按钮发出请求。 在验证一切正常并且对结果满意之后,可以使用REST查询下的URL发出AJAX请求,以检索本地日期和时间,并用感兴趣的本地日期和时间替换“时区”值