2016-04-20 47 views
0

我正在用v8編寫v8上的C++插件。構造函數的一個參數是Date類型。則IsDate返回true,但我不知道如何將它轉換爲C++ Date對象獲取年,月,日和等。v8 :: value到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); 
    } 
} 

感謝您的幫助!

+0

你都寫過一些試圖做到這一點的轉換?請提供一些代碼來代替您的評論。這段代碼如何不按預期工作? –

+0

@ConspicuousCompiler我已經添加了一個例子。基本上,我需要調用一個需要提升日期的函數。 – user2391685

回答

0

你可以蒙上了V8值到Date對象的v8::Date::Cast功能。

從那裏,你可以提取自Unix紀元(1970年1月1日)與NumberValue功能的毫秒數。

然後由澆鑄秒static_cast<time_t>(millisSinceEpoch/1000)

數量從time_t獲得與localtime功能struct *tm這個數字轉換爲std::time_t對象。

後來終於提取日/月/年值:

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);   
    } 
}