Встроенные средства форматирования DataTable в настоящее время позволяют настраивать только строки форматирования (шаблоны). Настройка с функцией обратного вызова не поддерживается.
Вот класс форматера, который поддерживает функцию обратного вызова.
/**
* Custom formatter class for Google Visualization DataTable
* Can be used like a built-in formatters when they are not enough.
* https://developers.google.com/chart/interactive/docs/reference#formatters
* Changes the displayed/formatted value. The value itself remains unchanged.
*
* @param function() custom value conversion function
* this function
* - takes one value as input (the original value) and
* - returns the formatted value
*/
var CustomFormatter = function(formatValue) {
this.formatValue = formatValue;
}
/**
* Formats a Google DataTable column
* @param {Object} dt DataTable to format
* @param {Number} column index number
*/
CustomFormatter.prototype.format = function(dt, column) {
for (var i = 0; i < dt.getNumberOfRows(); i++) {
var value = dt.getValue(i, column);
dt.setFormattedValue(i, column, this.formatValue(value));
}
}
Этот класс может использоваться как встроенные функции форматирования, но с функцией обратного вызова в конструкторе, подобной этой, которая преобразует число в ЧЧ: ММ: СС
var customFormatter = new CustomFormatter(function(value) {
var hours = parseInt(value / 3600) % 24;
var minutes = parseInt(value / 60) % 60;
var seconds = value % 60;
return (hours < 10 ? "0" + hours : hours) +
":" + (minutes < 10 ? "0" + minutes : minutes) +
":" + (seconds < 10 ? "0" + seconds : seconds);
});
customFormatter.format(dataTable, 1);
Вот рабочая демо-скрипка: http://jsfiddle.net/o5tdt2r8/10/
В качестве альтернативы используйте addColumn в DataView, как описано в другом ответе.
Спасибо @ oli's за оригинальный ответ. Я отделил пользовательскую функцию форматирования обратного вызова от стандартного форматера.