Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как сравнить две даты в коде? (http://www.flasher.ru/forum/showthread.php?t=174050)

uzver3254 17.01.2012 02:44

Как сравнить две даты в коде?
 
Всё ещё пишу погодный гаджет, теперь встал вопрос в том, чтоб в зависимости от времени суток показывал луну или солнце.
Есть три переменные:
Код:

"sunriseTime" //восход
"sunsetTime" //закат
"stationTime" //текущее время

Нужно элементарно сделать условие
Код AS3:

If (stationTime<=sunsetTime || stationTime>sunriseTime)
{
SUN.visible=true;
MOON.visible=false;
}else{
SUN.visible=false;
MOON.visible=true;
}

Но проблема в том, что все три переменные являют собой String(); потому сравнить их не удается. Пример формата времени: "14:38"

Подскажите, как сравнить эти переменные? Приведение к int(sunsetTime); всегда дает ноль.

Zebestov 17.01.2012 02:49

Код AS3:

trace("13:05" > "07:36"); // true

Работает, только если часы/минуты до 10 снабжаются нулем перед цифрой.

etc 17.01.2012 10:07

Цитата:

Сообщение от Zebestov (Сообщение 1057398)
Код AS3:

trace("13:05" > "07:36"); // true

Работает, только если часы/минуты до 10 снабжаются нулем перед цифрой.

Это шаманство, уж лучше дату распарсить.

zuxul 17.01.2012 10:23

Цитата:

Сообщение от Zebestov (Сообщение 1057398)
Код AS3:

trace("13:05" > "07:36"); // true

Работает, только если часы/минуты до 10 снабжаются нулем перед цифрой.

Тут надо применить решение от iNils-a
Код AS3:

("0" + time1).substr(-5,5) > ("0" + time2).substr(-5,5)

как-то так.

Dukobpa3 17.01.2012 11:21

Код AS3:

var dateArr1:Array = date1.split(':');
var dateArr2:Array = date2.split(':');
 
// Эти две строки на случай если кол-во разрядов отличается.
// подразумевается что меряются просто две даты, типа количество минут/секунд/часов
while(dateArr1.length < dateArr2.length) dateArr1.unshift('0');
while(dateArr2.length < dateArr1.length) dateArr2.unshift('0');
 
var length:int = dateArr1.legth;
 
for(var i:int = 0 ; i < legth ; I ++)
{
  if(int(dateArr1[i]) < int(dateArr2[i]))
  {
    var res:Boolean = true;
    break;
  }
  if(int(dateArr1[i]) > int(dateArr2[i]))
  {
    var res:Boolean = false;
    break;
  } 
}

В итоге получим тру если дата1 меньше, и фалс если дата2 меньше.
Не самое оптимальное решение:) Зато прозрачное и рабочее))

wvxvw 17.01.2012 11:58

Перевести даты/время в числа и сравнить?

Dukobpa3 17.01.2012 12:01

Я выше собственно это и сделал)

i.o. 17.01.2012 13:36

а к обычному Date почему бы не привести?

Zebestov 17.01.2012 15:34

Цитата:

Сообщение от etc (Сообщение 1057416)
Это шаманство, уж лучше дату распарсить.

Если время в нормальном формате подается (с нулями), то никакое это ни шаманство :) это стандартная для всех(?) языков/платформ процедура сравнения строковых значений. И в контексте данной задачи решение можно назвать очень даже элегантным :p

cursed_man 17.01.2012 16:00

легкое шаманство)
Код AS3:

var t:String        = '12:2',
t2:String        = '1:59',
tmp:Array = (t+':'+t2).split(':');
 
trace(int(tmp[0])==int(tmp[2])?int(tmp[1])>int(tmp[3]):int(tmp[0])>int(tmp[2]));



Часовой пояс GMT +4, время: 08:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.