2011-04-14 64 views
2

我能夠從WebBrowser的WinForms控制調用WebBrowser.ObjectForScripting C#方法使用javascript window.external並通過stringintbool等,但我不知道怎麼打發的JavaScript Date對象,並以某種方式將其轉換/編組爲.NET DateTime類。傳遞的JavaScript Date對象C#WebBrowser控件使用的window.external

顯然,我可以通過一個string並解析它,但這不是重點。我只是好奇我怎麼能用javascript Date和.NET DateTime

回答

0

我終於搞定了。我不知道爲什麼,但我無法使用它與dynamic。這裏是解決方案:

[ComVisible(true)] 
public class Foo 
{ 
    public void Bar(object o) 
    { 
     var dateTime = (DateTime)o.GetType().InvokeMember("getVarDate", BindingFlags.InvokeMethod, null, o, null); 
     Console.WriteLine(dateTime); 
    } 
} 
3

您可以利用Javascript中的dates表示爲自UNIX epoch(1970-01-01 00:00:00 UTC)以來經過的毫秒數。使用valueOf()方法從Date對象獲得該值:

var millisecondsSinceEpoch = yourDate.valueOf(); 

如果你能封送價值,C#爲double,你可以用它的構造和AddMilliseconds()方法創建適當DateTime對象:

DateTime yourDateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) 
    .AddMilliseconds(millisecondsSinceEpoch); 
+0

我能做到這一點,但我期待只爲如何讀取JavaScript的'在C#Date'對象的解決方案。我甚至不確定這是否可能,但如果不是,那沒關係。但我希望有辦法做到這一點。 – prostynick 2011-04-18 09:36:22

+0

C#中沒有「Javascript日期對象」 – Magnus 2011-04-18 09:48:40

+0

據我所知,當我將Date對象傳遞給C#時,它使用COM進行封送,所以我認爲可以做到這一點。 – prostynick 2011-04-18 11:19:23

1

我找到了更好的解決方案爲我的項目。

在javascript:

var date = new Date(); 
myComObject.DoSomething(date.getVarDate()); 

在C#

[ComVisible(true)] 
public class Foo 
{ 
    public void Bar(DateTime dateTime) 
    { 
     Console.WriteLine(dateTime); 
    } 
} 
+0

當然這是可能的,但我想知道如何在javascript中調用'getVarDate'。 – prostynick 2011-05-25 09:45:07