Отображение поля даты и времени всегда отображает устанавливает время до полуночи, используя to_spreadsheet (Axlsx)
Сайт My Rails 4.2 позволяет пользователям загружать электронную таблицу XLSX. Для рендеринга электронной таблицы я использую гем to_spreadsheet, который использует Axlsx для рендеринга электронных таблиц.
Я пытаюсь отобразить дату в формате d/m/yyyy h:mm
используя числовой формат 22
который представляется единственным числовым форматом, отображающим дату и время в соответствии с документацией Axlsx.
Я форматирую строку используя strftime("%F %T")
и настройка num_fmt
до 22 в источнике HTML, но время всегда отображается как полночь:
контроллер:
# just render one row with one cell containing the current time
@data = [{
# for the sake of example, convert a string to datetime
date: "01/02/2016 14:16:15".to_datetime.strftime("%F %T")
}]
Посмотреть
%table
%thead
%tr
%th Date
%tbody
- @data.each do |row|
%tr
%td.date=row[date]
- format_xls 'table' do
- format 'td.date', num_fmt: 22
таблица
╭──────────────────────╮
│ Date │
╞══════════════════════╡
│ 01/02/2016 00:00 │ <----- Should be "01/02/2016 14:16:15"
└──────────────────────┘
Я пытался удалить num_fmt
и дата и время отображаются правильно. Однако это интерпретируется Excel как строка, которая устраняет возможность для пользователей выполнять дополнительные вычисления в ячейках.
Результат одинаков как в MS Excel, так и в OO Calc.
Это проблема с to_spreadsheet
, axlsx
, или я неправильно устанавливаю формат?
1 ответ
Я решил это с помощью разработчиков из github здесь: https://github.com/glebm/to_spreadsheet/issues/27
Оказывается, вы должны дать клетке таблицы datetime
класс, если вы хотите, чтобы время было сохранено. Поэтому потребуется изменить HAML на следующее:
%table
%thead
%tr
%th Date
%tbody
- @data.each do |row|
%tr
%td.datetime=row[date]
- format_xls 'table' do
- format 'td.datetime', num_fmt: 22
Это тогда делает правильную дату и время:
╭──────────────────────╮
│ Date │
╞══════════════════════╡
│ 01/02/2016 14:16 │
└──────────────────────┘