1,js的日期類型最終體現爲一個很大的雙精度數,表示的是從1970年元旦零點到要表示的日期時間所經過的毫秒數。這裏的基準時間是格林尼治時間,而不是你所在地的當地時間,在js中用new Date建立出來的時間則是本地時間,這是一個陷阱。
2,vb腳本中的日期類型是com的日期類型,也是一個雙精度數,根據我的觀察,它表示的是從1900年元旦零點到要表示的時間所經過的天數,小數點後面是天數後面的時間除以一天所得的小數部分。與js不同,這個基準時間表示的是格林尼治時間,而在腳本中建立的時間也是格林尼治時間,所以,以北京爲例,同樣的時間,在vb中表示的數比在js中表示的數多了8個小時的時間。這裏不太好理解,舉個例子,在js中new Date(2012,0,1,8,0,0),表示的是本地時間(北京時間),但實際轉換爲基準時間,是0點0分0秒,這樣,一計算,減去基準0點時間就少了8個小時的時間,而在vb腳本中建立的是實實在在的8點0分0秒的時間,減去基準0點時間,也就比js的要多8個小時間了。
3,在js中,新建一個日期,他的月數是從0開始算的,比如要表示2012年元旦,不能用new Date(2012, 1, 1, 0, 0, 0)來表示,而必須用new Date(2012,0,1,0,0,0)來表示,這是另外一個陷阱,如果不仔細看手冊,99%的人都會陷進去。
4,用vb建立的date類型的數,在C++代碼中,是一個variant,它的類型是VT_BYREF|VT_VARIANT,而不是VT_DATE,它的pvarValue的類型纔是VT_DATE類型,所以要從VBS傳來的variant中取出那個表示日期時間的雙精度數來,得這樣:vDate.pvarValue->date.
5,從1900年到1970年,經過了25569天。在兩種腳本之間轉換時會用得上,當然不要忘了還有本地時間比基準時間多出來的時間,北京時間多出來8個小時。