gpt4 book ai didi

javascript - 是否有一些 v8 函数可以从像 "2015-02-20"这样的字符串创建一个 C++ v8::Date 对象,而无需从 C++ 执行 JS?

转载 作者:行者123 更新时间:2023-11-30 02:34:57 26 4
gpt4 key购买 nike

JavaScript 的日期构造函数可以解析字符串来创建日期:

var date = new Date("2015");
console.log(date); // Thu Jan 01 2015 06:00:00 GMT+0600 (NOVT)
console.log(date.getTime()); // 1420070400000

我需要在我的 C++ Node.js 插件中进行类似的解析(字符串到日期)。我找到了两种获取 v8:Date 的方法:

  • static Local<Value> Date::New(Isolate* isolate, double time) .它需要一个 double 值。

  • static Date* Date::Cast(v8::Value* obj)但它简单地将字符串转换为 double :


v8::Local<v8::String> str = Nan::New("2015").ToLocalChecked();
v8::Date *castDate = v8::Date::Cast(*str);
double castVal = castDate->NumberValue();
printf("%f\n", castVal); // 2015.000000, not 1420070400000 :(

v8::Local<v8::Date> newDate =
v8::Date::New(info.GetIsolate(), 2015).As<v8::Date>();
double newVal = newDate->NumberValue();
printf("%f\n", newVal); // 2015.000000

v8 中有哪些方法可以从字符串创建 C++ v8::Date?

更新(2016.01.05):

我在问题标题中添加了“无需从 C++ 执行 JS”。

最佳答案

我的想法有点开箱即用,想出了一些诡计:

v8::Local<v8::Date> tmp = Nan::New<v8::Date>(0).ToLocalChecked();
v8::Local<v8::Function> cons = v8::Local<v8::Function>::Cast(
Nan::Get(tmp, Nan::New("constructor").ToLocalChecked()).ToLocalChecked()
);

const int argc = 1;
v8::Local<v8::Value> argv[argc] = {Nan::New("2015").ToLocalChecked()};
v8::Local<v8::Date> date = v8::Local<v8::Date>::Cast(
Nan::NewInstance(cons, argc, argv).ToLocalChecked()
);

首先,我创建了一个任意的 Date 对象,然后我提取了构造函数,然后使用该函数有效地调用 new Date("2015")

您还可以将构造函数保留在您的类中,以便在频繁使用时稍微提高效率。

关于javascript - 是否有一些 v8 函数可以从像 "2015-02-20"这样的字符串创建一个 C++ v8::Date 对象,而无需从 C++ 执行 JS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34158318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com