节点csv-stringify格式时间戳列

问题描述 投票:0回答:3

我正在使用Node csv-stringify包将对象列表转换为csv。

其中一列包含时间戳,stringify方法将其转换为纪元日期。

var stringify = require('csv-stringify');

...

input = [
{'field1':'val1', 'timemodified':'2016-08-16T23:00:00.000Z'},
...
]

stringify(input, function(err, output){
console.log(output);
})

输出中修改的时间格式为:

1471388400000

如何在输出中保留原始时间戳格式?

我尝试使用formatters选项但它没有效果:http://csv.adaltas.com/stringify/examples/

 stringify(input, {formatters: {
      "timemodified": function(value){
        return value.format("YYYY/MM/DD hh:mm:ss");
      }
    }},function(err, output) {
      fs.writeFile('userUpload.csv', output, 'utf8', function(err) {
        if (err) {
          console.log('Error - file either not saved or corrupted file saved.');
        } else {
          console.log('userUpload.csv file saved!');
        }
      });
    });
javascript node.js csv
3个回答
0
投票

我尝试了没有自定义格式化程序的代码,它按预期工作。我得到'val1,2016-08-16T23:00:00.000Z'作为输出。

但是如果我在输入中有一个日期对象,我会得到时间戳:

input = [
{'field1':'val1', 'timemodified': new Date('2016-08-16T23:00:00.000Z')},
...
]

请检查输入中是否有日期对象。


0
投票

你可以在doc examples找到答案

var moment = require('moment');
...
var stringifier = stringify(input, {
  formatters: {
    date: function(value) {
      return moment(value).format('YYYY-MM-DD');
    }
  }
}, function(err, output) {
  console.log(output);
});

0
投票

docs,您可以将“cast”传递给选项。

例:

const stringify = require('csv-stringify');
const assert = require('assert');

stringify([{
  name: 'foo',
  date: new Date(1970, 0)
},{
  name: 'bar',
  date: new Date(1971, 0)
}],{
  cast: {
    date: function (value) {
      return value.toISOString()
    }
  }
}, function (err, data) {
  assert.equal(
    data,
    "foo,1969-12-31T23:00:00.000Z\n" +
    "bar,1970-12-31T23:00:00.000Z\n"
  )
})
© www.soinside.com 2019 - 2024. All rights reserved.