我不是那么喜欢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应用程序中,并在此处导致错误:< / p>
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)
此日期似乎无效,无法创建日期对象。
根据我的理解在线阅读问题应该是旧的JS或Rhino(可能是Rhino实现的JS版本)不支持这种类型的日期,可能我必须以完全符合的日期格式转换它 ISO 8601
所以我认为我必须将我的字符串 2017-11-09 06:00:00 转换为符合 ISO 8601 标准的内容。
我无法使用第三方库。
我该怎么做?
答案 0 :(得分:0)
可以使用Date#toISOString()
或Date#toJSON()
let d = new Date('2017-11-09 06:00:00')
console.log(d.toISOString())
console.log(d.toJSON())
答案 1 :(得分:0)
//如果您想要转换日期而不是时区转换
var date ='2017-11-09 06:00:00'; var convertDate = date.replace(“”,“T”); // 2017-11-09T06:00:00
//如果你想用utc timezone转换日期 var date = new Date(“2017-11-09 06:00:00”)。toISOString()
答案 2 :(得分:0)
如果我已正确理解您的问题,问题不在于您需要ISO 8601格式的日期,而是您需要从未在ISO格式化的日期创建Date
对象8601.我个人只是使用正则表达式将日期解析为它的部分,然后将它们传递给Date
构造函数:
var currentOriginalForecast = {
"start_date": "2017-11-09 06:00:00"
};
var rxParseDate = /(\d{4})-(\d\d)-(\d\d)\s+(\d\d):(\d\d):(\d\d)/;
var dateParts = currentOriginalForecast.start_date.match(rxParseDate);
var year = dateParts[1],
month = dateParts[2],
day = dateParts[3],
hour = dateParts[4],
minute = dateParts[5],
second = dateParts[6];
var dateCurrentOriginalForecast = new Date(Date.UTC(year, month - 1, day, hour, minute, second));
console.log(dateCurrentOriginalForecast);
由于start_date
中没有提到时区,我假设它是UTC并使用Date.UTC
转换它并将结果时间戳传递给Date
构造函数。如果start_date
在当地时间,您只需删除Date.UTC
并将参数直接传递到Date
构造函数中。我还要提到month - 1
;这是因为Date
构造函数(和Date.UTC
)期望基于0的月份。