2015-09-15 3 views
0

У меня есть приложение, построенное с помощью JQuery Mobile & PhoneGap, и этот код не работает в iOS, но отлично работает для Android. Я также использую moment.jsdate.js формат даты не работает в iOS

формат даты = Чт сен 17 2015 00:00:00 GMT-0400 (EDT)

var selecdate = new Date(date).getTime(); //Get the Unix time based on date selected from calender 
var sDate = moment(selecdate); //pass the date to the moment.js library 
var aDate = moment();//Get current date 
var PTime = sDate.diff(aDate, 'days');//Calculate the different between current date and selected date using moment.js library. 


if (PTime < 0){ //If the selected date is before today return false. 
alert("Select a Future Date"); 
return false; 
} 

Может кто-то помочь здесь? Не уверен, почему этот простой код не работает в iOS. В Android, если пользователь выбирает дату, которая до сегодняшней даты, PTime будет меньше, чем O, и он предупредит пользователя «Выбрать будущую дату» в iOS, он полностью игнорирует оператор if.

+0

Что является примером значение 'date' переменной в первой строке? И, пожалуйста, уточните, что вы подразумеваете под «это не работает». –

+0

в Android, если пользователь выбирает дату, которая до сегодняшнего дня возвращает false после предупреждения «Выбрать будущую дату» в iOS, он полностью пропускает этот оператор if. Похоже, что формат даты не нравится. – Keez

+0

Пожалуйста, ясно, что 'date' a * string * с точным форматированием, включая сокращение времени часового пояса? или это объект 'Date'? Что возвращает 'typeof date'? И если это объект «Дата», то почему вы создаете из него еще один объект «Date»? Действительно, вы можете просто передать его непосредственно конструктору момента: 'sdate = moment (date)' - Нет необходимости проходить через 'Date' и' getTime'. –

ответ

1

Поведение new Date(dateObject) не определено спецификацией ECMAScript. В большинстве случаев он будет эквивалентен new Date(dateObject.valueOf()), что эквивалентно оригиналу dateObject. Я не на 100% позитивен, но возможно, что некоторые среды (например, старые устройства Android), возможно, не реализовали это. Если он не реализован, ваш код может останавливаться на первой строке.

Кроме того, это совершенно не нужно. Вы можете просто сделать:

if (moment(date).isBefore(moment().startOf('day'))) { 
    alert("Select a Future Date"); 
    return false; 
} 

Или вы даже можете сделать это без момента, как так:

function getStartOfToday() { 
    var dt = new Date(); 

    dt.setHours(0); 
    dt.setMinutes(0); 
    dt.setSeconds(0); 
    dt.setMilliseconds(0); 

    // Handle browser-specific DST edge case when day starts at 1:00 AM 
    // Ex: Firefox on Oct 18, 2015 in Brazil 
    if (dt.getHours() !== 0) { 
     dt.SetTime(dt.getTime() + 36e5); 
    } 

    return dt; 
} 

var today = getStartOfToday(); 
if (date < today) { 
    alert("Select a Future Date"); 
    return false; 
} 
+0

thx, позвольте мне проверить это на iOS. Как решить новую проблему Date (dateObject), если мне нужно установить дату и время самостоятельно и сравнить с текущим временем. ex 'var rdate = момент (fordate) .format ('YYYY MM DD'); var rtdate = moment (rdate + "" + ctime); ' – Keez

+0

Я думаю, вопрос в том, как я могу получить пропуск, если это формат даты Чт Сен 17 2015 15:00:00 GMT-0400. Или мне нужно изменить формат? – Keez

+0

Прочитайте [документы по разбору строк] (http://momentjs.com/docs/#/parsing/string-format/) –

Смежные вопросы