【发布时间】:2016-01-19 01:53:19
【问题描述】:
我们设法以客户希望的方式在我们的应用中显示日期。这对我们来说是一项艰巨的任务,但我们对结果感到满意。我们正在使用 Ionic 框架,仅在 iOS 设备和模拟器上出现以下错误。浏览器和 Android 完美显示日期。
所以我从这里读到有些人对 .split 方法很幸运。我们将其添加到我们的代码中,但继续收到此错误,并且显示内容已损坏 ng-bind {{}}.. 这是来自 iOS 的错误
E R R O R:convDate.split 不是函数。 (在'convDate.split('')'中,'convDate.split'是未定义的)
**Error: convDate.split is not a function. (In 'convDate.split(' ')', 'convDate.split' is undefined)**
file:///var/mobile/Containers/Bundle/Application/104DE270-18AC-4FB1-9F97-66F93E885A0B/driverApp.app/www/js/controllers/BookingsController.js:147:35
fn
regularInterceptedExpression@file:///var/mobile/Containers/Bundle/Application/104DE270-18AC-4FB1-9F97-66F93E885A0B/driverApp.app/www/lib/ionic/js/ionic.bundle.js:23059:37
expressionInputWatch@file:///var/mobile/Containers/Bundle/Application/104DE270-18AC-4FB1-9F97-66F93E885A0B/driverApp.app/www/lib/ionic/js/ionic.bundle.js:22961:42
$digest@file:///var/mobile/Containers/Bundle/Application/104DE270-18AC-4FB1-9F97-66F93E885A0B/driverApp.app/www/lib/ionic/js/ionic.bundle.js:24507:43
$apply@file:///var/mobile/Containers/Bundle/Application/104DE270-18AC-4FB1-9F97-66F93E885A0B/driverApp.app/www/lib/ionic/js/ionic.bundle.js:24783:31
done@file:///var/mobile/Containers/Bundle/Application/104DE270-18AC-4FB1-9F97-66F93E885A0B/driverApp.app/www/lib/ionic/js/ionic.bundle.js:19196:53
completeRequest@file:///var/mobile/Containers/Bundle/Application/104DE270-18AC-4FB1-9F97-66F93E885A0B/driverApp.app/www/lib/ionic/js/ionic.bundle.js:19368:15
requestLoaded@file:///var/mobile/Containers/Bundle/Application/104DE270-18AC-4FB1-9F97-66F93E885A0B/driverApp.app/www/lib/ionic/js/ionic.bundle.js:19309:24
(anonymous function)console-via-logger.js:172
(anonymous function)ionic.bundle.js:21161
(anonymous function)ionic.bundle.js:17940
$digestionic.bundle.js:24532
$applyionic.bundle.js:24782
doneionic.bundle.js:19195
completeRequestionic.bundle.js:19367
requestLoadedionic.bundle.js:19308
我们的日期过滤器代码
.filter('customDateFilter', function($filter) {
return function(input) {
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'Novemeber', 'December'];
var weekdays = ['SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY'];
var convDate = $filter('date')(new Date(input), 'MMMM dd EEEE yyyy');
var inputDate = convDate.split(' ');
// SHOW "Today" on today's date instead of actual date O_o
var showToday = new Date();
if (convDate === ($filter('date')(new Date(showToday), 'MMMM dd EEEE yyyy')) return "TODAY";
if (convDate !== ($filter('date')(new Date(showToday), 'MMMM dd EEEE yyyy')) {
return inputDate[2] + " " + inputDate[0] + " " + inputDate[1];
}
};
})
customeDate fiter 视图中的代码..
<span id="dates-fonts-styles">{{groupedBooking[0].driver_departing_time | customDateFilter}}</span>
对我们的预订进行分组的功能..(不确定是否有必要)
function setBookingGroupDate(bookings) {
//*2*Go through each booking
for (var i = bookings.length - 1; i >= 0; i--) {
var date = new Date(bookings[i].driver_departing_time); //*3*Create date from drvier_departing_date
var dateWithoutHour = new Date(date.getFullYear(), date.getMonth(), date.getDate()); //*4* create same date but w/o the hr to minimize the differences
var dateCode = dateWithoutHour.getTime(); //Get timeStamps to have same filed for all and same type to be able to order and GROUP
bookings[i].groupByDateCode = dateCode; //add it back to respective booking[index]
};
//Return the bookings
return bookings;
}
从该代码返回的日期是 1 月 18 日星期一,依此类推.. 只有 iOS 向我们发送错误并显示 {{groupedBooking[0].driver_departing_time |视图上的 customDateFilter}} ..
有人知道是否有解决办法吗?我们尝试了 .split,基于这里的很多好感。
【问题讨论】:
-
表达式
inputDate === showToday永远不会为真,因为 showToday 是一个 Date 对象,它只能是===自身,而 inputDate 是其他一些值。 -
input 的值是多少,因此
new Date(input)的结果是什么? -
您在另一个答案下方回复了这些 cmets。这里的推论是 input 是一个字符串,并且您依赖 Date 构造函数在
new Date(input)中解析它,这是 never 一个好主意。麻烦的平台可能不会解析字符串并返回无效的日期,因此$filter('date')(...)不会返回您期望的字符串。您应该始终手动解析日期字符串(库可以提供帮助,但支持特定格式是 2 行代码)。
标签: javascript ios angularjs date split