toISOString 在 iPhone 中无法与 Cordova Ionic 一起使用

Posted

技术标签:

【中文标题】toISOString 在 iPhone 中无法与 Cordova Ionic 一起使用【英文标题】:toISOString not working with Cordova Ionic in iPhone 【发布时间】:2014-11-01 22:26:47 【问题描述】:

我正在使用 Cordova Ionic 框架在 androidios 中开发应用程序。在我的要求中,我想在页面中显示月份和日期。我有一个服务日期,我的代码就像这个控制器:

.controller('groupMessagesCtrl', function($scope, $stateParams, Services) 

    Services.getGroupMessage($stateParams).then(function(data)
        $scope.groupMessage = data.data;
    );

    $scope.toISOString = function(x)
        return new Date(x).toISOString();
    ;

)

html 页面中

<div class="list messages_list">
  <a class="item item-avatar" ng-repeat="Message in groupMessage" href="#/app/message/Message.CS_MESSAGE_ID">
    <!--<p>Message</p>-->
    <img src="img/sample/venkman.jpg">
    <!-- Adding the user name to the message-->
    <h2><span class="date">toISOString(Message.CS_RECEIVED_DATE)</span>Message.CS_FIRST_NAME +" "+Message.CS_LAST_NAME</h2>
    <p>Message.CS_MSG</p>
  </a>
</div>

仅在 iPhone 应用程序中调用 toISOString() 函数时出现未定义错误。除了 iPhone,在所有浏览器和 Android 应用中都运行良好。

【问题讨论】:

什么是x?细绳?数字?格式?如果它是一个字符串,那么使用 Date 构造函数解析字符串是非常不可靠的。编写自己的解析器非常简单(在 toISOString 函数中再添加一行代码)。 【参考方案1】:

这是因为您的 $scope 没有 Message 对象。我有点困惑,你代表Message 对象的代码在哪里,但我假设你的Message 对象是groupMessage 的子对象,所以你的controller 应该是这样的:

Services.getGroupMessage($stateParams).then(function(data)
  $scope.groupMessage = data.data; // I assume it's an array
  $scope.Message = $scope.groupMessage[0]; // It's an example to defining an `Message` object
);

我举一个例子,从你的数组中创建一个Message 对象,并假设它是一个date 对象。在您的 HTML 中简单地说:

Message.toISOString()

没有创建一个新方法只是为了从一个日期获取ISOString

【讨论】:

【参考方案2】:

这里的 x 是日期字符串。

日期在 Safari 浏览器中无法通过传递字符串,x 替换为 /-/g 到 /

代码是 return new Date(x.replace(/-/g, "/")).toISOString();

.controller('groupMessagesCtrl', function($scope, $stateParams, Services)

Services.getGroupMessage($stateParams).then(function(data)
    $scope.groupMessage = data.data;
);

$scope.toISOString = function(x)
    return new Date(x.replace(/-/g, "/")).toISOString();
;

)

【讨论】:

以上是关于toISOString 在 iPhone 中无法与 Cordova Ionic 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

date-fns 中的啥方法相当于 moment().toISOString()

TypeError:formats.dateTimeString.toISOString 不是函数

javascript toISOString() 忽略时区偏移

javascript toISOString()忽略时区偏移量

Safari 为 Date toISOString() 返回了不正确的值

无法将图像添加为与所有 iPhone 兼容的 Launchscreen