v8::值到日期之间的转换

Conversion between v8::value to date

本文关键字:转换 之间 v8 日期      更新时间:2023-09-26

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

谢谢你的帮助!

您可以使用v8::Date::cast函数将v8 Value强制转换为Date对象。

从中,您可以使用NumberValue函数提取自Unix epoch(1970年1月1日)以来的毫秒数。

然后通过投射秒数static_cast<time_t>(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);         
  }
}