【发布时间】:2017-11-09 12:02:41
【问题描述】:
我不是很喜欢 JavaScript,但我遇到了以下问题。
我有一个像这样的 JSON 对象:
{
"start_date": "2017-11-09 06:00:00"
}
进入我在浏览器中执行的 JavaScript 脚本:
var dateCurrentOriginalForecast = new Date(currentOriginalForecast.start_date);
它工作正常:它创建了一个新的 Date 对象,其值与 2017-11-09 06:00:00 日期相关。
问题是我必须使用 Rhino(一种允许在 Java 应用程序中执行 JS 代码的 JavaScript 实现)将这个 JavaScript 脚本执行到 Java 应用程序中,这会导致错误:
TID: [-1234] [] [2017-11-09 11:10:08,915] INFO {org.apache.synapse.mediators.bsf.ScriptMessageContext} - dateCurrentOriginalForecast: Invalid Date {org.apache.synapse.mediators.bsf.ScriptMessageContext}
TID: [-1234] [] [2017-11-09 11:10:08,918] ERROR {org.apache.synapse.mediators.bsf.ScriptMediator} - The script engine returned an error executing the inlined js script function mediate {org.apache.synapse.mediators.bsf.ScriptMediator}
com.sun.phobos.script.util.ExtendedScriptException: org.mozilla.javascript.EcmaError: RangeError: Date is invalid. (<Unknown Source>#137) in <Unknown Source> at line number 137
at com.sun.phobos.script.javascript.RhinoCompiledScript.eval(RhinoCompiledScript.java:68)
at javax.script.CompiledScript.eval(CompiledScript.java:92)
这个日期好像无效,无法创建Date对象。
根据我在网上阅读的理解,问题应该是旧的 JS 或 Rhino(可能是 Rhino 实现的 JS 版本)不支持这种类型的日期,可能我必须将其转换为完全兼容的日期格式符合 ISO 8601
所以我认为我必须将我的字符串 2017-11-09 06:00:00 转换为符合 ISO 8601 标准的字符串。
我无法使用第三方库。
我该怎么做?
【问题讨论】:
-
你试过
'2017-11-09T06:00:00'或'2017-11-09T06:00:00T'吗?也许它只是缺少T和/或Z。在 JS 中,它在所有三个版本中都能正常工作。 -
我不确定您需要什么。是如何在 javascritp 中生成 ISO8601 日期还是其他方式?
-
@NinaScholz 你到底是什么意思?我该做什么?
-
用这两个字符串测试一下看看是否有效。
-
@NinaScholz 我都试过了: var dateCurrentOriginalForecastISO8601 = new Date('2017-11-09T06:00:00');和 var dateCurrentOriginalForecastISO8601 = new Date('2017-11-09T06:00:00T');但我仍然收到无效日期错误消息
标签: javascript rhino iso8601