|
17 | 17 |
|
18 | 18 | <body>
|
19 | 19 | <div style="width:1000px">
|
| 20 | + <p>This example demonstrates a time series scale by drawing a financial line chart using just the core library. For more specific functionality for financial charts, please see <a href="https://github.com/chartjs/chartjs-chart-financial">chartjs-chart-financial</a></p> |
20 | 21 | <canvas id="chart1"></canvas>
|
21 | 22 | </div>
|
22 | 23 | <br>
|
|
37 | 38 | <button id="update">update</button>
|
38 | 39 | <script>
|
39 | 40 | function generateData() {
|
| 41 | + var unit = document.getElementById('unit').value; |
| 42 | + |
| 43 | + function unitLessThanDay() { |
| 44 | + return unit === 'second' || unit === 'minute' || unit === 'hour'; |
| 45 | + } |
| 46 | + |
| 47 | + function beforeNineThirty(date) { |
| 48 | + return date.hour() < 9 || (date.hour() === 9 && date.minute() < 30); |
| 49 | + } |
| 50 | + |
| 51 | + // Returns true if outside 9:30am-4pm on a weekday |
| 52 | + function outsideMarketHours(date) { |
| 53 | + if (date.isoWeekday() > 5) { |
| 54 | + return true; |
| 55 | + } |
| 56 | + if (unitLessThanDay() && (beforeNineThirty(date) || date.hour() > 16)) { |
| 57 | + return true; |
| 58 | + } |
| 59 | + return false; |
| 60 | + } |
| 61 | + |
40 | 62 | function randomNumber(min, max) {
|
41 | 63 | return Math.random() * (max - min) + min;
|
42 | 64 | }
|
|
53 | 75 | var date = moment('Jan 01 1990', 'MMM DD YYYY');
|
54 | 76 | var now = moment();
|
55 | 77 | var data = [];
|
56 |
| - var unit = document.getElementById('unit').value; |
57 |
| - for (; data.length < 60 && date.isBefore(now); date = date.clone().add(1, unit)) { |
58 |
| - if (date.isoWeekday() <= 5) { |
59 |
| - data.push(randomBar(date, data.length > 0 ? data[data.length - 1].y : 30)); |
| 78 | + var lessThanDay = unitLessThanDay(); |
| 79 | + for (; data.length < 60 && date.isBefore(now); date = date.clone().add(1, unit).startOf(unit)) { |
| 80 | + if (outsideMarketHours(date)) { |
| 81 | + if (!lessThanDay || !beforeNineThirty(date)) { |
| 82 | + date = date.clone().add(date.isoWeekday() >= 5 ? 8 - date.isoWeekday() : 1, 'day'); |
| 83 | + } |
| 84 | + if (lessThanDay) { |
| 85 | + date = date.hour(9).minute(30).second(0); |
| 86 | + } |
60 | 87 | }
|
| 88 | + data.push(randomBar(date, data.length > 0 ? data[data.length - 1].y : 30)); |
61 | 89 | }
|
62 | 90 |
|
63 | 91 | return data;
|
|
0 commit comments