【发布时间】:2013-06-16 15:27:09
【问题描述】:
我将 Cordova/Phonegap 用于跨平台应用程序,我需要格式化从 AJAX 调用返回的 JSON 日期。
日期存储为 UTC,我需要将其格式化为本地时区。因此,科尔多瓦的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,上面的代码产生: 前 正在做 完毕
对于 iOS,上面的代码产生: 前 完毕 在做
我认为问题在于匿名函数是异步的,在执行 console.log() 时可能会或可能不会设置。
是否有一种普遍接受的方法来解决这个时间问题?还是有更好的方法来获得我想要/需要的东西?
---编辑---
根据以下内容,我意识到我问错了问题。
首先,我重构了我的代码,以便可以从处理函数处理输出。感谢您指出这一点。干净多了。
但是,我需要循环执行此操作,并且需要跟踪我正在使用的迭代。
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 中,我得到类似的东西
- 我的日期是:某个日期我的迭代器是:0
- 我的日期是:某个日期我的迭代器是:1
- 我的日期是:某个日期我的迭代器是:2
- 我的日期是:某个日期我的迭代器是:3
- 我的日期是:某个日期我的迭代器是:4
在 iOS 中,我得到了
- 我的日期是:某个日期我的迭代器是:5
- 我的日期是:某个日期我的迭代器是:5
- 我的日期是:某个日期我的迭代器是:5
- 我的日期是:某个日期我的迭代器是:5
- 我的日期是:某个日期我的迭代器是:5
我希望能够做前一个例子,我错过了什么?
【问题讨论】:
标签: javascript asynchronous cordova