簡體   English   中英

節點csv-stringify格式時間戳列

[英]Node csv-stringify format timestamp column

我正在使用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!');
        }
      });
    });

我嘗試了沒有自定義格式化程序的代碼,它可以按預期工作。 我得到'val1,2016-08-16T23:00:00.000Z'作為輸出。

但是如果輸入中有日期對象,則會得到時間戳記:

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

請檢查您的輸入中是否有日期對象。

您可以在文檔示例中找到答案

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);
});

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"
  )
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM