我正在使用Cordova / Phonegap进行跨平台应用程序,我需要格式化从AJAX调用返回的JSON日期。
日期存储为UTC,我需要为当地时区格式化日期。所以似乎cordova的navigator.globalization.dateToString
符合要求。但是,我正在构建一个更大的数据字符串,所以我无法处理回调中的完整作业。我需要在字符串中获取格式化的日期/时间并在以后使用它。
var myTime = new Date(parseInt(myData.StartTime.substr(6))); // get a date object
var myTimeString = '';
console.log("before");
navigator.globalization.dateToString(myTime,
function(date)
{
console.log("doing");
myTimeString = date.value;
},
function()
{
alert('Error getting dateString\n');
},
{
formatLength : 'short',
selector : 'date and time'
});
console.log("done");
console.log(myTimeString); // the problem is that this is not necessary set.
对于Android,上面的代码产生: 之前 干 DONE
对于iOS,上面的代码会产生: 之前 DONE 做
我认为问题在于匿名函数是异步的,在console.log()
执行时可能会也可能不会设置。
是否有一种普遍接受的解决此时间问题的方法?或者有更好的方法来获得我想要/需要的东西吗?
--- --- EDIT
根据以下内容,我意识到我提出了错误的问题。
首先,我重构了我的代码,以便可以从处理函数处理输出。谢谢你指出这一点。它更清洁。
但是,我需要在循环中执行此操作,并且需要跟踪我正在使用的迭代。
for(var i = 0; i < 5; i++)
{
var myTime = new Date(parseInt(myData.StartTime.substr(6))); // get a date object
navigator.globalization.dateToString(myTime,
function(date) {
myTimeString = "my date is: " +date.value +" my iterator is: "+i;
console.log(myTimeString);
},
function() { alert('Error getting dateString\n'); },
{
formatLength : 'short',
selector : 'date and time'
});
}
在android中,我得到像
这样的东西在iOS中,我得到了
我希望能够做到前一个例子,我错过了什么?
答案 0 :(得分:0)
是的,这是一个异步调用,所以你需要在回调函数中继续你的进程:
var myTime = new Date(parseInt(myData.StartTime.substr(6))); // get a date object
var myTimeString = '';
console.log("before");
navigator.globalization.dateToString(myTime,
function(date)
{
console.log("doing");
myTimeString = date.value;
callback(myTimeString);
},
function()
{
alert('Error getting dateString\n');
},
{
formatLength : 'short',
selector : 'date and time'
});
function callback(myTime)
{
console.log("done");
console.log(myTime);
}