如何使用 d3-scale time 获取两个日期之间的日期
How to get dates between two dates using d3-scale time
我需要获取两天之间的日期,但问题是使用 d3 scaleTime 小时、分钟和秒变为零。它会自动舍入时间。有什么办法可以覆盖吗?
我在 antd Slider 中使用这个格式化数据
我试过的
function App() {
const start = moment().hour(8).minute(30);;
const end = moment().add(10, 'months').hour(8).minute(30);
const dateTicks2 = d3.scaleTime()
.domain([+start, +end])
.ticks(10).reduce((initial, current) => {
return {
...initial,
[current]: moment(current).format('YYYY-MM-DD HH:mm:ss'),
};
}, {});
return ( <
div > {
JSON.stringify(dateTicks2, null, 2)
} <
/div>
);
}
ReactDOM.render( < App / > , document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.0.0/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3-scale/0.0.1/scale.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
如何获得包含小时和分钟的实际日期
请帮忙!
我不确定你的问题,但通过这种方式你可以获得当前时、分、秒的日期。
我给你两种使用矩方法的方法。第一种是从当前日期推断 hour
、minute
和 seconds
,并将它们设置在 reduce 函数中。
const hour = moment().hour();
const minute = moment().minute();
const second = moment().second();
...
[current]: moment(current).hour(hour).minute(minute).second(second).format('YYYY-MM-DD HH:mm:ss')
否则第二种方法是从今天午夜获取第二个并将其添加到 current
日期。
const seconds = moment().diff(moment().startOf('day'), 'seconds');
...
[current]: moment(current).add(seconds, 'seconds').format('YYYY-MM-DD HH:mm:ss'),
最后的片段:
function App() {
const start = moment().hour(8).minute(30);;
const end = moment().add(10, 'months').hour(8).minute(30);
const hour = moment().hour();
const minute = moment().minute();
const second = moment().second();
const seconds = moment().diff(moment().startOf('day'), 'seconds');
console.log(seconds)
const dateTicks2 = d3.scaleTime()
.domain([+start, +end])
.ticks(10).reduce((initial, current) => {
return {
...initial,
// [current]: moment(current).hour(hour).minute(minute).second(second).format('YYYY-MM-DD HH:mm:ss'),
[current]: moment(current).add(seconds, 'seconds').format('YYYY-MM-DD HH:mm:ss'),
};
}, {});
return ( <
div > {
JSON.stringify(dateTicks2, null, 2)
} <
/div>
);
}
ReactDOM.render( < App / > , document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.0.0/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3-scale/0.0.1/scale.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
我需要获取两天之间的日期,但问题是使用 d3 scaleTime 小时、分钟和秒变为零。它会自动舍入时间。有什么办法可以覆盖吗?
我在 antd Slider 中使用这个格式化数据
我试过的
function App() {
const start = moment().hour(8).minute(30);;
const end = moment().add(10, 'months').hour(8).minute(30);
const dateTicks2 = d3.scaleTime()
.domain([+start, +end])
.ticks(10).reduce((initial, current) => {
return {
...initial,
[current]: moment(current).format('YYYY-MM-DD HH:mm:ss'),
};
}, {});
return ( <
div > {
JSON.stringify(dateTicks2, null, 2)
} <
/div>
);
}
ReactDOM.render( < App / > , document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.0.0/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3-scale/0.0.1/scale.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
如何获得包含小时和分钟的实际日期 请帮忙!
我不确定你的问题,但通过这种方式你可以获得当前时、分、秒的日期。
我给你两种使用矩方法的方法。第一种是从当前日期推断 hour
、minute
和 seconds
,并将它们设置在 reduce 函数中。
const hour = moment().hour();
const minute = moment().minute();
const second = moment().second();
...
[current]: moment(current).hour(hour).minute(minute).second(second).format('YYYY-MM-DD HH:mm:ss')
否则第二种方法是从今天午夜获取第二个并将其添加到 current
日期。
const seconds = moment().diff(moment().startOf('day'), 'seconds');
...
[current]: moment(current).add(seconds, 'seconds').format('YYYY-MM-DD HH:mm:ss'),
最后的片段:
function App() {
const start = moment().hour(8).minute(30);;
const end = moment().add(10, 'months').hour(8).minute(30);
const hour = moment().hour();
const minute = moment().minute();
const second = moment().second();
const seconds = moment().diff(moment().startOf('day'), 'seconds');
console.log(seconds)
const dateTicks2 = d3.scaleTime()
.domain([+start, +end])
.ticks(10).reduce((initial, current) => {
return {
...initial,
// [current]: moment(current).hour(hour).minute(minute).second(second).format('YYYY-MM-DD HH:mm:ss'),
[current]: moment(current).add(seconds, 'seconds').format('YYYY-MM-DD HH:mm:ss'),
};
}, {});
return ( <
div > {
JSON.stringify(dateTicks2, null, 2)
} <
/div>
);
}
ReactDOM.render( < App / > , document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.0.0/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3-scale/0.0.1/scale.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>