Java 的 JavaScriptEngine 的時間會依照 Java 程式所在的環境時間、設定的時區為準 所以執行 JavaScript code 的 new Date(),取得的時間也會跟環境時間相同 我這次的需求是希望 new Date 取得的時間是客戶瀏覽器端的時間,而不是Server本地時間 讓運算結果更貼近客戶用瀏覽器取得的結果 查過了 ScriptEngine 的 Source code,他並沒有公開的方法可以設定 Instance 的時間 底層的 native date 型別的時間其實是使用 Java 的 System.currentTimeMillis(); 似乎是沒有插手的空間了? 不過好在 JavaScript 的特色就是彈性大 手動 override 掉 Date function 也可以解決 var timeMilliseconds = 1447739048291; // millisecond is passed from client side. var d = new Date(timeMilliseconds), _ODATE = Date; Date = function (a1, a2, a3, a4, a5, a6, a7) { if (arguments.length === 0) { return d; } else if (arguments.length === 1) { return new _ODATE(a1); } else { a3 = a3 || 0; a4 = a4 || 0; a5 = a5 || 0; a6 = a6 || 0; a7 = a7 || 0; return new _ODATE(a1, a2, a3, a4, a5, a6, a7); } }; 不指定時間的 Date constructor 就直接回傳已經建立好的客戶端時間 如果有指定時間就跑原本的 Date constructor 比原先預期還要容易些的解法