Tengo un archivo JS que se llama en una aplicación de bokeh basada en python. El archivo JS produce un botón de descarga para obtener un csv de los datos utilizados en los gráficos interactivos creados por la aplicación. Los datos contienen fechas y números enteros. ¿Cómo puedo obtener el csv descargado para incluir el formato de las fechas?
Este es el archivo JS.
function table_to_csv(source) { const columns = Object.keys(source.data) const nrows = source.get_length() const lines = [columns.join('`').replaceAll(/,/g,' ').replaceAll(/`/g,',')] for (let i = 0; i < nrows; i++) { let row = []; for (let j = 0; j < columns.length; j++) { const column = columns[j] const val = source.data[column][i] if (column == 'Date'){ row.push(val.getDate() +'/'+(val.getMonth()+1)+'/'+val.getFullYear()} else row.push(val.toString()) } lines.push(row.join(',')) } return lines.join('\n').concat('\n') } const filename = 'data/survey_results.csv' const filetext = table_to_csv(source) const blob = new Blob([filetext], { type: 'text/csv;charset=utf-8;' }) //addresses IE if (navigator.msSaveBlob) { navigator.msSaveBlob(blob, filename) } else { const link = document.createElement('a') link.href = URL.createObjectURL(blob) link.download = filename link.target = '_blank' link.style.visibility = 'hidden' link.dispatchEvent(new MouseEvent('click')) }
El formato de fecha en el csv utilizado para los gráficos es d/m/y.
Me tomó un tiempo hacer ejercicio, pero (por supuesto) la respuesta fue sencilla. Cambié la línea 12 a:
row.push(new Date(val).toLocaleDateString("en-US"))
Un problema fue que había entendido mal de dónde venían los datos. Era de bokeh CDS, con las fechas como estándar aaaa-mm-ddT00:00:00.000000000.