如何在Javascript中测试google.protobuf.Timestamp?

7

使用 Scala 创建的 API 的 proto 文件。我的代码是 JS,尝试测试我的代码并收到以下错误:

AssertionError [ERR_ASSERTION]: invalid return value: post[0].lastPublishedDate: Date expected

尝试但未成功的方法:
  1. lastPublishedDate: {seconds: <date>, nano: <date>},其中日期是toISOString()中提到的日期,如文档所述(https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/timestamp.proto#L115
  2. lastPublishedDate: new Date().toISOString()
  3. 只需将2019-02-18T14:18:45.346Z(这是API调用时返回的内容)作为日期。
似乎对我都没用。
我在网上找到的唯一其他相关信息是https://github.com/dcodeIO/protobuf.js/issues/437,看起来也没有解决。
有人能够在JS中使用google.protobuf.Timestamp吗?
2个回答

15

您可以使用此函数根据google/protobuf/timestamp.proto生成日期。

const getDate = ()=>{
    if (window.proto) {
        const proto = window.proto;
        const timeMS = Date.now();
        const timestamp = new proto.google.protobuf.Timestamp()
        timestamp.setSeconds(timeMS / 1000);
        timestamp.setNanos((timeMS % 1000) * 1e6);
        return timestamp;
    }
}

或者你也可以使用这个:

const date = new proto.google.protobuf.Timestamp()
date.fromDate(new Date())

你可以使用proto.google.protobuf.Timestamp中的toDate()方法来获取JS日期。

希望对你有所帮助。


2
setSecondssetNanos由于某些原因对我无效,但是fromDate有效。谢谢! - Neurotransmitter
我也一样,这个答案救了我的一天。非常感谢! - laszlo-horvath
谢谢 - 哇,这个语法真是糟糕。谷歌怎么回事??! - outside2344

1

显然这是一个常规的JS日期(new Date()),可以从错误信息中推断出来...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接