2015-07-03 2 views
1

У меня есть этот код:найти завтра день, а послезавтра в AS3

var currentDate=new Date(); 
var my_date:Date = new Date(); 
var month=currentDate.getMonth()+1; 
var day=currentDate.getDate(); 
var day2=currentDate.getDate()+1; 
var day3=currentDate.getDate()+2; 
var day4=currentDate.getDate()+3; 
var day5=currentDate.getDate()+4; 
var year=currentDate.getFullYear(); 
var tomorrow; 
var three; 
var four; 
var five; 
var months:Array = ["janvier", "fevrier", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "decembre"]; 
var today =(day+" "+ months[my_date.month]); 
var days:Array = ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"]; 

Я хотел бы иметь день завтра (и 5 следующих из них).

Я пробовал:

tomorrow =(days[my_date.day+1]+" "+day2 +" "+ months[my_date.month]+" "+ year); 
    trace(tomorrow); 

Это работает. У меня есть "Samedi 5 Juillet 2015"

, но тогда я попробовал:

day3 =(days[my_date.day+2]+" "+day2 +" "+ months[my_date.month]+" "+ year); 
trace(day3); 

Но результаты с "неопределенным 6 Juillet 2015".

Вы знаете, как я мог это сделать?

Спасибо


EDIT

Так что я добавить в мой код для именин:

var index:int = my_date.day + 2 
if(index >= days.length) 
{ 
    index -= days.length; 
} 

Так вот мой код:

var currentDate=new Date(); 
var my_date:Date = new Date(); 
var month=currentDate.getMonth()+1; 
var day=currentDate.getDate(); 
var day2=currentDate.getDate()+1; 
var day3=currentDate.getDate()+2; 
var year=currentDate.getFullYear(); 
var tomorrow; 
var three; 
var four; 
var five; 
var six; 
var months:Array = ["janvier", "fevrier", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "decembre"]; 
var days:Array = ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"]; 

var today =(days[my_date.day]+" "+day +" "+ months[my_date.month]+" "+ year); 
var index:int = my_date.day + 2 
if(index >= days.length) 
{ 
    index -= days.length; 
} 
trace(days[index+6]); 

Я добавляю эти строки для воскресенья были ошибкой (Субботы было «не определено»):

if(days[index] == "dimanche"){ 
tomorrow =(days[index+6]+" "+day2 +" "+ months[my_date.month]+" "+ year); 
}else{ 
tomorrow =(days[index-1]+" "+day2 +" "+ months[my_date.month]+" "+ year); 
} 

А потом

three = (days[index] + " " + day3 + " " + months[my_date.month] + " " + year); 
    four = (days[index+1] + " " + day4 + " " + months[my_date.month] + " " + year); 
    five = (days[index+2] + " " + day3 + " " + months[my_date.month] + " " + year); 
} 

Но мне кажется, что она не работает со всеми дней.

Для «третьего июля», это здорово работать:

enter image description here

Но если изменить дату компьютера и выбрать, Exemple, 23-го июля

enter image description here

Некоторые дни являются «неопределенными».

Любая идея, почему?

ответ

0

Чтобы показать будущие даты, используя месяцы и дни массивов, вы можете сделать так:

var months:Array = ['janvier', 'fevrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'decembre'], 
    days:Array = ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']; 

function show_7_days(date:Date): void { 
    var future_date:Date = new Date(date.fullYear, date.month, date.date); 
    for(var i:int = 1; i < 8; i++){ 
     future_date.date = date.date + i;  
     trace(
      days[future_date.getDay()] + ' ' 
      + future_date.getDate() + ' ' 
      + months[future_date.getMonth()] + ' ' 
      + future_date.getFullYear() 
     ); 
    } 
} 

И потом:

show_7_days(new Date()); 

// gives : 
//  samedi 4 juillet 2015 
//  dimanche 5 juillet 2015 
//  lundi 6 juillet 2015 
//  mardi 7 juillet 2015 
//  mercredi 8 juillet 2015 
//  jeudi 9 juillet 2015 
//  vendredi 10 juillet 2015 

И на определенную дату:

show_7_days(new Date(1900, 3, 3)); 

// gives : 
//  mercredi 4 avril 1900 
//  jeudi 5 avril 1900 
//  vendredi 6 avril 1900 
//  samedi 7 avril 1900 
//  dimanche 8 avril 1900 
//  lundi 9 avril 1900 
//  mardi 10 avril 1900 

Но вы также можете упростить вещи, используя flash.globalization.DateTimeFormatter следующим образом:

var date_formater:DateTimeFormatter = new DateTimeFormatter('fr-FR', DateTimeStyle.LONG, DateTimeStyle.NONE); 

function show_7_days(date:Date): void { 
    var future_date:Date = new Date(date.fullYear, date.month, date.date); 
    for(var i:int = 1; i < 8; i++){ 
     future_date.date = date.date + i;  
     trace(date_formater.format(future_date)); 
    } 
} 

Который даст вам те же результаты.

Надеюсь, что это поможет.

1

Проблема связана с индексами. Вы пытаетесь получить доступ к days[my_date.day+2], который (в зависимости от дня) может ссылаться на индекс за пределами. Если my_date.day + 1 или my_date.day + 2 когда-либо больше days.length, вы столкнетесь с той же проблемой.

Вы можете решить это с помощью простого условия. Например, если my_date.day + 2 больше или равно days.length, тогда вместо этого получите доступ days[my_date.day + 2 - days.length]. Это обеспечивает то, что мы называем, находится в пределах.

Пример:

var index:int = my_date.day + 2 
if(index >= days.length) 
{ 
    index %= days.length; 
} 
day3 = (days[index] + " " + day2 + " " + months[my_date.month] + " " + year); 
trace(day3); 

Это должно устранить проблему.Надеюсь, поможет!

+0

Хм, похоже, он не работает. Я вставляю код. Вот результат 'trace (day3)': 'undefined 5 juillet 2015' (правильный результат должен быть уменьшен 5 июль 2015). – user3094896

+1

Мои извинения - забыли AS3 использует индексы на основе нуля. Я обновил код - теперь он проверяет, является ли 'index' больше * или равно *' days.length' – phasma

+0

Отлично! оно работает. Спасибо ! – user3094896