【问题标题】:Can't format angular timestamp无法格式化角度时间戳
【发布时间】:2023-03-15 12:05:01
【问题描述】:

我从 firebase 获取日期作为字符串(不确定这是否是问题所在),然后我可以简单地显示它:
{{ post.data.date }}
它显示:Timestamp(seconds=1544623520, nanoseconds= 401000000)
问题是当我给它一个日期格式 ({{ post.data.date | date:'yyyy-MM-dd'}}) 时,它会给出一个 InvalidPipeArgument 错误,但是如果我添加 * 1000 {{ post.data.date * 1000 | date:'yyyy-MM-dd'}}
错误就消失了,但什么也没有显示。 没有那个 * 1000 的完整错误:
错误错误:InvalidPipeArgument:'无法将管道'DatePipe'的“时间戳(秒=1544623520,纳秒=401000000)”转换为日期'

【问题讨论】:

  • DatePipe 需要一个 JavaScript Date 对象。你似乎有别的东西。我不知道 Firebase,但您应该检查它的实际类型,并可能首先将其转换为 Date。如果您从 TypeScript(而不是 Angular 模板)执行此操作,您还将获得类型支持来帮助您。
  • 感谢您的回复!我实际上尝试将其更改为 Date 但我得到了相同的结果

标签: angular


【解决方案1】:
Unable to convert "Timestamp(seconds=1544623520, nanoseconds=401000000)" into a date' for pipe 'DatePipe'

这是因为"Timestamp(seconds=1544623520, nanoseconds=401000000)" 不是有效的 JS 日期,也不是 Date 构造函数可以插入的字符串。在任何 JS 环境中都可以看到同样的情况:

new Date("Timestamp(seconds=1544623520, nanoseconds=401000000)");
// --> Invalid Date

您可以在绑定之前转换值,也可以在 DatePipe 之前在您自己的管道中转换值:

const timeStamp = "Timestamp(seconds=1544623520, nanoseconds=401000000)";
let [,res] = timeStampe.match(/seconds=(\d+)/);
return new Date(+res * 1000); // because JS epoch times are milliseconds
// --> Wed Dec 12 2018

【讨论】:

    猜你喜欢
    • 2020-01-10
    • 2019-02-17
    • 2011-06-03
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多