【问题标题】:Unable to format date inside object无法在对象内格式化日期
【发布时间】:2021-10-16 16:59:26
【问题描述】:

我有一些 JavaScript 测试,我必须编写通过它们的代码。

测试如下:

beforeAll(async () => {
  availabilities = await getAvailabilities(new Date("2020-01-01 00:00"));
});

it("returns an Object", () => {
  expect(typeof availabilities === "object").toBe(true);
  expect(Array.isArray(availabilities)).toBe(false);
});

it("key is a date string with format YYYY/MM/DD", () => 
  expect(Object.keys(availabilities)[0]).toEqual("2020-01-01");
});

it("value is an Array", () => {
  expect(Object.values(availabilities)[0]).toEqual([]);
});

我使用knex 作为数据库并使用以下内容进行了选择:

const response = await knexClient("events").select("starts_at", "ends_at");

但是当我使用date-fns 来格式化日期时

response = format(response[0], 'yyyy-MM-dd');

它不起作用。

我知道我不能直接格式化响应,因为它是一个对象,但我不知道如何解析它。

【问题讨论】:

  • 对于我们这些从未听说过 knex 的人,你能console.log(response) 告诉我们这个变量是什么吗?您的数据库并不真正相关。您的数据才是最重要的。
  • 请详细说明“它不起作用”。测试失败了吗?还有其他错误吗?
  • Knex 并不是真正的问题。它返回一个对象内的选择。问题是我无法解析对象以格式化它包含的日期。 @udalmik 它没有通过提供的测试。

标签: javascript node.js knex.js date-fns


【解决方案1】:

您可以尝试使用创建函数来格式化日期

res=[ { starts_at: '2020-01-01T07:00:00.000Z' } ]
let final
let date = res.filter(res=>final=res.starts_at.split("T")[0].split("-")[2]+"/"+res.starts_at.split("T")[0].split("-")[1]+"/"+res.starts_at.split("T")[0].split("-")[0])
console.log(final);

【讨论】:

  • 它有效。有点。如果我给它一个日期作为字符串它可以工作,但我没有日期作为字符串,它是一个包含字符串的对象。 'console.log(响应);' '[ { 开始时间:'2020-01-01T07:00:00.000Z' } ]'
  • 抱歉我的错误解决方案现在将检查我编辑的解决方案,希望它能起作用
【解决方案2】:

谢谢你们的回答,但不幸的是它对我不起作用。

我使用 date-fns 来格式化时间,并像这样访问它:

const response = await knexClient("events").select("starts_at");

var start = response[0].starts_at;  
var onlyDate = format(new Date(start), "yyyy-MM-dd");
var onlyTime = format(new Date(start), "H:mm");
var Object = {
  [onlyDate] : [onlyTime]
}

它会返回我想要的日期和时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多