webForumDet fria alternativet

Ändra GMT +1 timme

Flash

10 svar · 672 visningar · startad av Maacus

Medlem sedan jan. 2007108 inlägg
Frågan#1

Jag har gjort en flash som läser RSS feeds. Problemet är det att tiden som används i feeden är i formatet GMT. Exempelvis så ska 09:45 ändras till 10:45.
Det är variablen subHour som jag vill lägga på en timme på.

itemDate = rss.childNodes[i].childNodes[j].firstChild.nodeValue; //Thu, 25 Jan 2007 08:24:00 GMT
subDate = itemDate.substring(5, 16);   //25 Jan 2007
subHour = itemDate.substring(17, 19);  //08
subMin = itemDate.substring(19, 22);  //:24
Medlem sedan maj 2005704 inlägg
#2

Det är ju aningen bökigt att räkna ut alla värden då en extra timme kan ändra datum, månad och tom år.
Olika långa månader och skottår gör det knappast till en enkel operation.

Vad du får göra är att använda Flash date funktion.
Kolla "Date constructor" i Flash hjäpen så ser du hur du skall skapa ett nytt datumobjekt från de värden du har.
Sedan kan du lägga till en timme genom att helt enkelt addera 360000 (ms i en timme) till ditt datumobjekt och det kommer automatiskt ha rätt timme, dag, månad och år.

Medlem sedan jan. 2007108 inlägg
#3

Datum strängen som jag hämtar från RSS:en ser ut så här Thu, 25 Jan 2007 09:33:21 GMT. Så jag har brutit ut alla delar utom månaden som jag inte vet hur jag ska få om till en siffra istället för text.

itemDate = rss.childNodes[i].childNodes[j].firstChild.nodeValue; //Thu, 25 Jan 2007 09:33:21 GMT
subYear = itemDate.substring(12, 16);
subDay = itemDate.substring(5, 7);
subHour = itemDate.substring(17, 19);
subMin = itemDate.substring(20, 22);
//
var addHour:Date = new Date(subYear,0,subDay,subHour,subMin);
var timetoadd:Number = 1000 * 60 * 60;
addHour.setTime(addHour.getTime() + timetoadd);
Time = addHour.getHours() + ":" + addHour.getMinutes();

Formatet som jag vill ha ut det i sen med GMT+1 är 10:33 25 Jan 2007

Medlem sedan maj 2005704 inlägg
#4
var months_array:Array = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");

var itemDate:String = "Thu, 25 Jan 2007 23:33:21 GMT"
subYear = itemDate.substring(12, 16);
subMon = getMonthAsNumber(itemDate.substring(8, 11));
subDay = itemDate.substring(5, 7);
subHour = itemDate.substring(17, 19);
subMin = itemDate.substring(20, 22);

var addHour:Date = new Date(subYear,subMon,subDay,subHour,subMin);
var timetoadd:Number = 1000 * 60 * 60;
addHour.setTime(addHour.getTime() + timetoadd);

function getMonthAsNumber(month:String):Number {
	var i:Number;
	var l:Number=months_array.length;
	for(i=0;i<l;i++){
		if(months_array[i]==month){
			return i;
		}
	}
}

function getMonthAsString(month:Number):String {
    return months_array[month];
}

var time:String = addHour.getHours() + ":" + addHour.getMinutes() + " " + addHour.getDate() +" "+ getMonthAsString(addHour.getMonth()) + " " +addHour.getFullYear();
trace(time); // 0:33 26 Jan 2007
Medlem sedan jan. 2007108 inlägg
#5

det är något som inte stämmer. Outputen som jag får blir "2:0 1 undefined 1970"

Medlem sedan maj 2005704 inlägg
#6

Märkligt...om jag klistar in koden exakt som ovan i en tom .fla så får jag "0:33 26 Jan 2007".

Ingen aning om varför det inte funkar för dig.

Medlem sedan jan. 2007108 inlägg
#7

jag provade det också och det gick bra i en tom fla.
Ser nu att variablen i och l krockar med mitt övriga script som läser in RSS:en.
Vad kan dom bytas ut mot?

Medlem sedan maj 2005704 inlägg
#8

Spelar ingen roll vad de heter sålänge de inte krockar.
Tex "j" och "len" kanske?

Medlem sedan jan. 2007108 inlägg
#9

jag hittade felet nu. Jag hade lagt funktionerna inuti en For sats. Lite dumt av mig men nu fungerar det.
Nu har jag enbart ett litet problem kvar och det är när det är tal mindre än 10. Så blir klockan exempelvis 17:4 istället för 17:04.

Medlem sedan maj 2005704 inlägg
#10

Gör en if sats som kollar om minuterna är mindre än 10.
Isåfall lägg till en nolla före.

Medlem sedan jan. 2007108 inlägg
#11

Stod helt still. Så klart att det inte var svårare än en if sats som kollar. För er som vill se slutgiltiga koden så finns den här.
Tack för all hjälp.

var itemDate:String = rss.childNodes[i].childNodes[j].firstChild.nodeValue;
//
subYear = itemDate.substring(12, 16);
subMon = getMonthAsNumber(itemDate.substring(8, 11));
subDay = itemDate.substring(5, 7);
subHour = itemDate.substring(17, 19);
subMin = itemDate.substring(20, 22);
var addHour:Date = new Date(subYear, subMon, subDay, subHour, subMin);
// Lägger till 1 timme GMT +1 Svensk tid.
var timetoadd:Number = 1000 * 60 * 60;
addHour.setTime(addHour.getTime() + timetoadd);
if (addHour.getMinutes() < 10) {
	vMinutes = "0" + addHour.getMinutes();
} else {
	vMinutes = addHour.getMinutes();
}
if (addHour.getHours() < 10) {
	vHours = "0" + addHour.getHours();
} else {
	vHours = addHour.getHours();
}
var time:String = vHours + ":" + vMinutes + " " + addHour.getDate() + " " + getMonthAsString(addHour.getMonth()) + " " + addHour.getFullYear();
//
259 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)