Я не знаком с Lavacharts,
, но я бы поставил под сомнение формат данных, когда они на самом деле достигают браузера.
, действительно ли они в формате json.
не уверен, что addRow
делает здесь, но, похоже, он загружает простой массив,
не объект json.
addRow([$hour_start->toDateTimeString(), $hourly_closing_price ,$hourly_value]);
в javascript, когда вы создаете дату из строки,
в большинстве случаев будет скорректирована для часового пояса.
см. Этот ответ для получения дополнительной информации.-> Почему Date.parse дает неверные результаты?
однако, в Google 101 * * представление строки даты json даст точную дату,
без настройкидля часового пояса.
посмотрите на следующий пример,
в первой строке, используется строка даты gson от json.
во второй, мы используем конструктор new Date()
из форматированной строки.
вы заметите, что браузер не меняет часовой пояс в первой строке,
, но во второй.
google.charts.load('current', {
packages: ['table']
}).then(function () {
var data = new google.visualization.DataTable({
cols: [
{type: 'datetime'}
],
rows: [
{c:[{v: 'Date(2018,8,7,17,0,0)'}]},
{c:[{v: new Date('2018-09-07T17:00:00+00:00')}]}
]
});
var formatDate = new google.visualization.DateFormat({
pattern: 'MM/dd/yyyy HH:mm:ss'
});
formatDate.format(data, 0);
var table = new google.visualization.Table(document.getElementById('table'));
table.draw(data);
document.getElementById('test-date0').innerHTML = data.getValue(0, 0);
document.getElementById('test-date1').innerHTML = data.getValue(1, 0);
});
div {
margin-bottom: 6px;
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div>Google table chart</div>
<div id="table"></div>
<div>raw data</div>
<div id="test-date0"></div>
<div id="test-date1"></div>
РЕДАКТИРОВАТЬ
одним из вариантов может быть использование представления данных для корректировки датыпо смещению часового пояса в браузере
это должно вернуть дату к исходному значению, отправленному с сервера ...
см. следующий рабочий фрагмент ...
google.charts.load('current', {
packages: ['table']
}).then(function () {
var data = new google.visualization.DataTable({
cols: [
{type: 'datetime'}
],
rows: [
{c:[{v: 'Date(2018,8,7,17,0,0)'}]},
{c:[{v: new Date('2018-09-07T17:00:00+00:00')}]}
]
});
var formatDate = new google.visualization.DateFormat({
pattern: 'MM/dd/yyyy HH:mm:ss'
});
// create data view
var view = new google.visualization.DataView(data);
view.setColumns([{
calc: function (dt, row) {
// one minute in milliseconds
var oneMinute = (60 * 1000);
// get date from data table
var rowDate = dt.getValue(row, 0);
// Adjust date for timezone
rowDate = new Date(rowDate.getTime() + (oneMinute * rowDate.getTimezoneOffset()));
// return new value and formatted value
return {
v: rowDate,
f: formatDate.formatValue(rowDate)
};
},
type: data.getColumnType(0)
}]);
var table = new google.visualization.Table(document.getElementById('table'));
table.draw(view);
document.getElementById('test-date0').innerHTML = view.getValue(0, 0);
document.getElementById('test-date1').innerHTML = view.getValue(1, 0);
});
div {
margin-bottom: 6px;
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div>Google table chart</div>
<div id="table"></div>
<div>raw data</div>
<div id="test-date0"></div>
<div id="test-date1"></div>