Reputation: 2413
i'm currently developing a cordova web based application with ionic and angularjs. now i've created a service that returns a formatted time the way my client wants it.. the problem with this is that whilst it works on android and in browser, it displays NaN on an iOS device. The date i insert is from a database in timestamp : NOW() format, is there a fix for this? this is my date service:
.factory('displaydate',['$filter', function($filter) {
return function (date){
var maandarray = new Array('Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December');
var actiondate = new Date(date);
var today = new Date();
if(today.getDate() == actiondate.getDate()){
var hourssince = today.getHours() - actiondate.getHours()
var minutessince = today.getMinutes() - actiondate.getMinutes()
var secondssince = today.getSeconds() - actiondate.getSeconds()
if(hourssince > 0){
date = hourssince+'u';
}else if(minutessince > 0){
date = minutessince+'m';
}else{
date = secondssince+'s';
}
}else{
var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
var diffDays = Math.round(Math.abs((today.getTime() - actiondate.getTime())/(oneDay)));
if(diffDays > 28){
var identifier = actiondate.getMonth() - 1;
var month = maandarray[identifier];
date = $filter('date')(actiondate,"d ") + month + $filter('date')(actiondate," yy " + " HH:" + "mm");
}else{
date = diffDays+'d';
}
}
return date;
}
}]);
Upvotes: 10
Views: 28998
Reputation: 141
This may work for you
var actiondate = new Date(date.replace(" ", "T"));
Upvotes: 0
Reputation: 917
The reason of the problem is iPhone Safari doesn't support the Y-m-d H:i:s
(ISO 8601) date format. I have encountered this problem in 2017/7/19, I do not understand why Safari did not fix the problem after two years.
I refer to the answer of Sjoerd, thanks Sjoerd, just rewrite it to a function to do the date conversion when you have many date need to be processed. After you get a date(must be Y-m-d H:i:s
format) from server, you could use the function convert the date to the format which iOS device could resolve and other browsers could resolve too.
function convertDateForIos(date) {
var arr = date.split(/[- :]/);
date = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]);
return date;
}
I encountered the problem when I write ajax for date, hope the solution will help others encountered the annoying problem.
Upvotes: 13
Reputation: 15
install momentjs to by
npm install moment --save
intitilize the new date with
var date = moment(yourDate).format()
var formatedDate = new data(date)
hope this resolve the issue
Upvotes: -3
Reputation: 2413
Fixed this thanks to @Ian his comment ,
changed this:
var actiondate = new Date(date);
to this:
var t = date.split(/[- :]/);
// Apply each element to the Date function
var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]);
var actiondate = new Date(d);
Upvotes: 29