d3.js 中具有特定时区的时间轴

2023-11-26

我在用d3.time.scale()(参考here)创建时间刻度并使用以下命令提供刻度值axis.tickValues([values]) (here)。为 [values] 中提供的指定 Date 对象呈现刻度。
一切都很好,但刻度值表示始终位于浏览器的当前时区。现在需要在特定时区(例如“亚洲/加尔各答”)显示它。有办法实现这一点吗?我看到的 max 选项用于格式化刻度,但不将其替换为自定义值,这对这种情况没有帮助。

EDIT:这可以使用外部库来实现,例如moment.js,但如果可以避免这种情况,则优选。


基于马克的解决方案,这是一个可行的解决方案不使用外部库。在文本字段中输入时区 ID(例如 - 欧洲/柏林)。

// Set the dimensions of the canvas / graph
var margin = {
    top: 30,
    right: 20,
    bottom: 100,
    left: 50
},
width = 600 - margin.left - margin.right,
    height = 270 - margin.top - margin.bottom;

var currentTZ = "local";

// Set the ranges
var x = d3.time.scale().range([0, width]);
var y = d3.scale.linear().range([height, 0]);

// Define the axes
var xAxis = d3.svg.axis().scale(x)
    .orient("bottom").ticks(10)
    .tickFormat(function (d) {

    if (currentTZ === "local") return d3.time.format('%X')(d);
    else {
        console.log(currentTZ);
        return d3.time.format('%X')(new Date(d.toLocaleString('en-US', {
            timeZone: currentTZ
        })));
    }
});

var yAxis = d3.svg.axis().scale(y)
    .orient("left").ticks(5);

// Define the line
var valueline = d3.svg.line()
    .x(function (d) {
    return x(d.date);
})
    .y(function (d) {
    return y(d.close);
});

// Adds the svg canvas
var svg = d3.select("body")
    .append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
    .append("g")
    .attr("transform",
    "translate(" + margin.left + "," + margin.top + ")");

var data = [{
    date: new Date(0),
    close: Math.random() * 100
}, {
    date: new Date(1800000),
    close: Math.random() * 100
}, {
    date: new Date(3600000),
    close: Math.random() * 100
}, {
    date: new Date(5400000),
    close: Math.random() * 100
}, {
    date: new Date(7200000),
    close: Math.random() * 100
}, {
    date: new Date(9000000),
    close: Math.random() * 100
}, {
    date: new Date(10800000),
    close: Math.random() * 100
}, {
    date: new Date(12600000),
    close: Math.random() * 100
}]

// Scale the range of the data
x.domain(d3.extent(data, function (d) {
    return d.date;
}));
y.domain([0, d3.max(data, function (d) {
    return d.close;
})]);

// Add the valueline path.
svg.append("path")
    .attr("class", "line")
    .attr("d", valueline(data));

// Add the X Axis
svg.append("g")
    .attr("class", "x axis")
    .attr("transform", "translate(0," + height + ")")
    .call(xAxis)
    .selectAll("text")
    .style("text-anchor", "end")
    .attr("dx", "-.8em")
    .attr("dy", ".15em")
    .attr("transform", function (d) {
    return "rotate(-65)"
});

// Add the Y Axis
svg.append("g")
    .attr("class", "y axis")
    .call(yAxis);

handleClick = function () {
    currentTZ = document.getElementById('timeZ').value;
    console.log(currentTZ)
    svg.selectAll("g.x.axis")
        .call(xAxis)
        .selectAll("text")
        .style("text-anchor", "end")
        .attr("dx", "-.8em")
        .attr("dy", ".15em")
        .attr("transform", function () {
        return "rotate(-65)"
    });
};
 body {
     font: 12px Arial;
 }
 path {
     stroke: steelblue;
     stroke-width: 2;
     fill: none;
 }
 .axis path, .axis line {
     fill: none;
     stroke: grey;
     stroke-width: 1;
     shape-rendering: crispEdges;
 }
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<input name="Submit" type="submit" value="Change Time" onClick="handleClick()">
<input type="text" id="timeZ" value="local">
</form>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

d3.js 中具有特定时区的时间轴 的相关文章

  • 在 HTML5 Javascript 中将 BlobBuilder 转换为字符串

    function blobToString blob var reader new FileReader var d reader onloadend function d callback reader result console lo
  • 可能未处理的承诺拒绝(id 0)类型错误 GET 或 HEAD 请求不允许主体

    import React from react import FlatList ActivityIndicator Text View from react native export default class FetchExample
  • 使用本地存储在从另一个表保存的 HTML TABLE 中打印 JSON,以便我在另一个页面上打印我的表

    在我的作业中 我必须使用用户输入中的数据并将数据保存在本地存储中 我必须以水平表格式将这些数据从本地存储打印到其他页面 为此 我编写了用于用户输入并将数据保存在本地存储中的代码 div p p div
  • jQuery .push 到 .get 调用中的数组给出空结果

    谁能告诉我为什么下面给我一个空字符串 当我console log contentArray in the get 回调函数它显示数据 但是当我尝试在下面的代码中执行它时 结果为空 sectionArray contentArray func
  • 如何使用有角度的材料创建卡片网格?

    我正在尝试使用 ng repeat 创建每行三张卡片的网格 我有一个普通的 javascript 对象数组附加到范围 下面的代码将为每张卡创建一个新行 div div
  • 如何使用 Playwright 使用选择器查找框架 (iframe)

    我有一个小问题 无法找到使用 Microsoft Playwright 框架的答案 根据您可以使用以下代码获取 iframe const frame page frame frame login 但是如何使用选择器来查找 iframe 并与
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • 本地推送通知到在应用程序内运行 JS 代码的 Win8 Live Tile

    我正在尝试将更新发送到我的应用程序的磁贴 当应用程序运行时 这可以正常工作 例如 当用户单击按钮时 我可以轻松地将磁贴更新通知发送到磁贴 我无法解决的是当应用程序无法运行时如何更新磁贴 我找到的唯一选择是使用以下命令从远程 Web 服务器拉
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • JavaScript RegEx:不同的结果:使用字符串和使用正则表达式“文字”构建模式?

    使用 RegExp 文字与字符串之间有什么区别吗 http jsfiddle net yMMrk http jsfiddle net yMMrk String prototype lastIndexOf function pattern p
  • 如何始终将焦点保持在文本框中

    我创建了一个包含两个 div 的 HTML 页面 左侧的 div 页面的 90 是 ajax 结果的目标 右侧的 div 页面的 10 包含一个文本框 该页面的想法是在文本框中输入零件编号 通过条形码扫描仪 并显示与该零件编号匹配的绘图 显
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • 聆听 Angular 2 中的元素可见性

    我正在为我的网络应用程序使用 Bootstrap 和 Angular 2 v4 我想监听指令中的元素以了解可见性变化 我的元素有一个可以隐藏其子元素的父元素hidden sm up我需要在每次隐藏或显示时触发一个函数 div hidden
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容

随机推荐

  • Oracle MIN 作为分析函数 - ORDER BY 的奇怪行为?

    这种特殊情况是从一个示例中提炼出来的 在该示例中 程序员假设对于两次装运到罐车的货物 第 1 行将首先装载 我更正了这个问题 以允许以任何顺序执行加载 但是 我发现MIN OVER PARTITION BY 允许ORDER BY在 Orac
  • 为什么 C++ 不能用 LR(1) 解析器解析?

    我正在阅读有关解析器和解析器生成器的内容 并在维基百科的 LR 解析页面中找到了此声明 许多编程语言都可以使用 LR 解析器的某些变体进行解析 一个值得注意的例外是 C 为什么会这样呢 C 的什么特殊属性导致它无法用 LR 解析器进行解析
  • 获取一个 python docker 容器与 redis docker 容器交互

    我对 docker redis 和任何类型的网络都很陌生 至少我知道 python 首先 我已经弄清楚如何获取 redis docker 映像并在 docker 容器中运行它 docker run name some redis d red
  • SSRS网页错误状态代码500

    已经部署了许多引用相同视图的报表部分 但是其中一个无法在服务器上运行 我认为这可能是由于参数到位 其中包含各种字符 这是我收到的错误消息 有谁对如何解决这个问题有任何建议 Webpage error details User Agent M
  • Angular - 如何以百分比形式设置输入字段格式,但在编辑时删除百分比?

    我试图找到一种方法 在初始页面加载时以百分比 例如 97 52 显示 html 输入字段 通过角度服务获取到后端的数据 即可观察 订阅 但也有此输入字段松散 当我编辑它时 即引发 DOM 焦点 事件时 它是百分比格式 格式数据绑定到模型 我
  • 发送“var_dump”到 FireBug 控制台

    如你所知var dump 除了价值展示其数据类型 and length 有什么方法可以将其输出记录到火虫控制台 I tried FirePHP and 消防记录器但两者都只输出变量值 有时甚至是不正确的变量值 也许你需要的是这样的 func
  • Three.js - 在单个点云中使用多个纹理

    我正在尝试使用 ShaderMaterial 在单个点云中使用多个纹理 我将纹理数组与纹理索引属性一起传递给着色器 并选择要在片段着色器中使用的适当纹理 相关设置代码 var particleCount 100 var uniforms t
  • 如何对 android aab 捆绑包使用 ProductFlavors

    我尝试通过productFlavors 构建不同的Android 应用程序包 为了保存和测试文件 我需要一个固定的文件名 对于 APK 我有以下工作代码 applicationVariants all variant gt if varia
  • Android ListView - 在“整”行位置停止滚动

    抱歉 标题令人困惑 我无法非常简洁地表达问题 我有一个带有 ListView 的 Android 应用程序 它使用圆形 无限 适配器 这基本上意味着我可以根据需要向上或向下滚动它 并且当它到达顶部或底部时 项目将环绕 使其看起来对于用户来说
  • Kotlin - 不重复的随机数

    我有一个问题 如何防止随机数重复 顺便问一下 有人可以向我解释如何对这些随机数进行排序吗 override fun onCreate savedInstanceState Bundle super onCreate savedInstanc
  • 使用 Maven 程序集排除文件不起作用

    我有非常简单的程序集描述符
  • Typescript 实现具有相同键但不同类型的接口

    我有一个界面 export interface Foo a string b string 我现在想要另一个类 它实现接口的所有键 但可以有另一种类型 export class Bar implements keysof Foo a Som
  • 如果 HTTP 代码的curl getinfo 没有返回代码?

    我正在对 Web 服务进行正常的curl 调用 并通过以下方式获取返回的 HTTP 代码 code curl getinfo ch CURLINFO HTTP CODE 它确实返回给我 code 作为 200 这很好 但是从一周开始记录cu
  • 如何删除空关联数组条目

    我有一个关联数组 csv arr Array 0 gt Array Enfalac gt alpha linolenic acid 300 mg Enfapro gt alpha linolenic acid 200 mg 1 gt Arr
  • Push_back 与 emplace_back

    我对之间的区别有点困惑push back and emplace back void emplace back Type Val void push back const Type Val void push back Type Val 由
  • C# 将 MM dd yyyy 格式字符串转换为日期时间

    我有 MMddyy 格式的字符串 例如 112192 我需要将其转换为 DateTime 对象 如果我尝试分割字符串并使用new DateTime yy mm dd 但将年份设置为 0092 但我需要将其设置为 1992 我也尝试过这个 D
  • 在 edmx 中重命名列的最佳方法是什么?

    我正在使用实体框架 4 0 我的方法是数据库优先方法 在 edmx 中重命名列名称或更改列的数据类型的最佳方法是什么 提前致谢 要重命名列 在 SQL Management Studio 中重命名该列 在 EDMX 编辑器中 选择 从数据库
  • 在java EE中,我应该将哪些jar放在库目录中?

    我有一个 Java EE 项目 该项目使用 Maven 构建为 ear 存档 有一个包含JPA 2持久单元的库jar 它位于ear的库目录中 因此多个其他模块可以使用它 在将 Shiro 的 Permission 接口的实现添加为该持久性单
  • 如何在异步函数上使用去抖动? [复制]

    这个问题在这里已经有答案了 我该如何使用debounce on an async功能 我内部有一个方法vue app 从一个 API 接收数据 该 API 不断调用我想避免的 API 这是我的方法 methods async getAlbu
  • d3.js 中具有特定时区的时间轴

    我在用d3 time scale 参考here 创建时间刻度并使用以下命令提供刻度值axis tickValues values here 为 values 中提供的指定 Date 对象呈现刻度 一切都很好 但刻度值表示始终位于浏览器的当前