【问题标题】:Conversion between v8::value to datev8::value 到日期之间的转换
【发布时间】:2016-08-13 20:08:47
【问题描述】:

我正在使用 nan 在 v8 上编写 C++ 插件。构造函数的参数之一是 Date 类型。 IsDate 返回 true,但我不知道如何将其转换为 C++ Date 对象以获取年、月和日等。

void NodeObject::New(const Nan::FunctionCallbackInfo<v8::Value>& info) {
    if(info[0]->IsDate()) {
        //convert and get year, month and day
        boost::gregorian::date d(2016 , 1 ,1);
        double price = getPrice(date);
    }
}

感谢您的帮助!

【问题讨论】:

  • 你写过什么来尝试进行这种转换?请提供一些代码来代替您的评论。这段代码怎么没有按预期工作?
  • @ConspicuousCompiler 我添加了一个示例。基本上,我需要调用一个需要提升日期的函数。

标签: javascript c++ node.js v8 node.js-nan


【解决方案1】:

您可以使用 v8::Date::Cast 函数将 v8 值转换为 Date 对象。

从那里您可以使用NumberValue 函数提取自 Unix 纪元(1970 年 1 月 1 日)以来的毫秒数。

然后通过转换秒数 static_cast&lt;time_t&gt;(millisSinceEpoch/1000) 将此数字转换为 std::time_t 对象

time_t 获取带有localtime 函数的struct *tm

然后最后提取日/月/年值:

void NodeObject::New(const Nan::FunctionCallbackInfo<v8::Value>& info) {
  if(info[0]->IsDate()) {
    double millisSinceEpoch = v8::Date::Cast(*info[0])->NumberValue(); 
    std::time_t t = static_cast<time_t>(millisSinceEpoch/1000);

    struct tm* ltime = localtime(&t);
    int year = ltime->tm_year + 1900;
    int month = ltime->tm_mon + 1;
    int day = ltime->tm_mday;

    boost::gregorian::date d(year, month, day);  
    double price = getPrice(date);         
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多