【问题标题】:Need to return a date/time string from phonegap's navigator.globalization.dateToString需要从 phonegap 的 navigator.globalization.dateToString 返回一个日期/时间字符串
【发布时间】: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


【解决方案1】:

是的,这是一个异步调用,所以你需要在回调函数中继续你的过程:

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);
}

【讨论】:

  • 在手机上的PhoneGap App上运行时JavaScript返回的日期/时间与在同一部手机上运行时PhoneGap的全球化函数返回的日期/时间有什么区别?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 2011-12-07
  • 2018-07-11
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
相关资源
最近更新 更多