Avatar billede agerled Nybegynder
25. marts 2004 - 16:03 Der er 12 kommentarer og
2 løsninger

æmdre noget tekst ud fra dato

Her er min kode:

<SCRIPT LANGUAGE=javascript>
                    <!--
                    function insertMessage(){
                        myStr = top.document.messageForm.defaultMessage.value;
                        dayReplaceStr = '';
                        switch (calculateSendDate(top.document.messageForm.selectedDate.value,top.document.messageForm.selectedHour.value, top.document.messageForm.selectedMinute.value,top.document.messageForm.alertMinutes.value)){
                            case 0:
                                dayReplaceStr = 'i dag'
                                break;
                            case 1:
                                dayReplaceStr = 'i morgen'
                                break;
                        }
                        myStr = replace(myStr,'*dag*' ,dayReplaceStr);
                        myStr = replace(myStr,'*tid*' ,top.document.messageForm.selectedHour.value + ":" + zeroFormatInt(top.document.messageForm.selectedMinute.value + ''));
                        if (top.document.messageForm.CustomerName.value+''!=''){myStr = replace(myStr,'*navn*' ,top.document.messageForm.CustomerName.value);}
                        myStr = replace(myStr,'*dato*' ,top.document.messageForm.selectedDate.value);
                        myStr = validateMsg(myStr);
                        top.document.messageForm.message.value=myStr;
                    }

                    function instr(str, search){
                        if(str==replace(str,search,'')){
                            return false;
                        }else{
                            return true;
                        }
                    }

                    function replace(str,find,repl) {
                        while(1 == 1) {
                            if(str.indexOf(find)==-1) return str;
                            str = str.replace(find,repl);
                        }
                    }

                    function zeroFormatInt(TmpInt) {
                        TmpInt = TmpInt-0;
                        if (TmpInt<10){
                            return '0' + TmpInt;
                        }else{
                            return TmpInt;
                        }
                    }

                           
                    function changeDate(dato){
                        if(!top.document.messageForm.editcheckbox.checked){
                            top.document.messageForm.selectedDate.value=dato;
                            top.document.getElementById('dato').innerHTML=dato;
                            insertMessage();
                            return true;
                        }else{
                            if(confirm('Hvis du ændre i tiden, vil evt. ændringer i beskeden gå tabt.\nØnsker du at fortsætte?')){
                                top.document.messageForm.selectedDate.value=dato;
                                top.document.getElementById('dato').innerHTML=dato;
                                insertMessage();
                                top.document.messageForm.editcheckbox.checked=false;
                                top.document.messageForm.CustomerName.disabled = false;
                                top.document.messageForm.message.disabled = true;
                                return true;
                            }else{
                                return false;
                            }
                        }
                    }
                   
                    function dateadd(per,n,d) {
                      switch(per) {
                          case "yyyy": d.setYear(d.getFullYear()+n); break
                          case "m": d.setMonth(d.getMonth()+n); break
                          case "ww": n*=7
                          case "d": d.setDate(d.getDate()+n); break
                          case "h": d.setHours(d.getHours()+n); break
                          case "n": d.setMinutes(d.getMinutes()+n); break
                          case "s": d.setSeconds(d.getSeconds()+n)
                      }
                      return d
                    }


                    function calculateSendDate(date, hour, min, alertMin){
                        bookdate = new Date()
                        tmpDate = new String(date);
                        counter = tmpDate.indexOf("-",0)
                        tmpDay = tmpDate.substr(0,counter);
                        tmpDate = tmpDate.substr(counter+1,tmpDate.length);
                        counter = tmpDate.indexOf("-",0);
                        tmpMonth = tmpDate.substr(0,counter);
                        tmpDate = tmpDate.substr(counter+1,tmpDate.length);
                        tmpYear = tmpDate;
                        bookdate.setFullYear(tmpYear);
                        bookdate.setMonth(tmpMonth-1);
                        bookdate.setDate(tmpDay);
                        bookdate.setMinutes(min);
                        bookdate.setHours(hour);
                        bookdate.setSeconds(0);
                        sendDate = new Date(bookdate.toString());
                        sendDate = dateadd('n',0-alertMin,sendDate)
                        if (sendDate.getMonth()==bookdate.getMonth()){
                            if (sendDate.getDate()==bookdate.getDate()){
                                ret = 0;
                            }else{
                                ret = 1;
                            }
                        }else{
                            ret = 1;
                        }
                        return ret;
                    }                   
                   
                    //-->
                    </SCRIPT>

Jeg får datoen fra en kalender som sender den valgte dato til dette script. Dato formatet er som dette: 25-03-04.

"alertMinuttes" er minut antal som bliver sendt til scriptet fra en selectbox. Alertminuttes er hvor mange minutter før den valgte dato og tidspunkt en sms skal sendes til brugeren.

scriptet skal regne ud om det den i beskeden skal skrive "i morgen" eller "i dag", men den skriver hele tiden kun "i morgen".

..hvad kan problemet være????? Håber jeg har beskrevet det godt nok...
Avatar billede nute Nybegynder
25. marts 2004 - 17:49 #1
problemet ligger i denne linie:

bookdate.setFullYear( tmpYear );

året der bliver sat ind, er 4 ... ikke 2004, derfor bliver datoerne forkerte.

efter denne linie:

sendDate = dateadd('n',0-alertMin,sendDate)

så indeholder 'sendDate' 'NaN', noget du ikke kan sammenligne med. Denne linie:

if (sendDate.getMonth()==bookdate.getMonth()){

læses derfor som:

if( NaN == 2 )

og din if bliver aldrig "true"

ved at skrive denne linie:

bookdate.setFullYear( tmpYear );

om til

bookdate.setFullYear( 20 + tmpYear );

så vli det fungere. Dette forudsetter selvfølgelig at alle dine sms'er bliver sendt i år 2000 eller senere, men det giver vel hellere ingen mening i at booke en sms i fortiden ?!

prøv hvertfald og se om det hjælper.

/nute
Avatar billede agerled Nybegynder
25. marts 2004 - 18:00 #2
det er helt perfekt, mange tak.

Jeg har lige et mere hvis du har tid og lyst:

Min form med teksten indeholder:

Hej *navn*
Husk du har møde *dag* kl. *tid* - vi ses!
Venlig hilsen
XXXXXX

Når jeg så har gemt teksten i db'en og derefter modtager den på min mobil så ser den sådan her ud:

Hej *navn*

Husk du har møde *dag* kl. *tid* - vi ses!

Venlig hilsen

XXXXXX

Hvordan forhindre jeg at der kommer mellemrum mellem linierne?
Avatar billede nute Nybegynder
25. marts 2004 - 19:34 #3
hmm ... jeg aner ikke noget om formater på sms'er
Avatar billede olebole Juniormester
25. marts 2004 - 22:42 #4
<ole>

Problemet er muligvis p.gr.a. MS' måde at lave linie-brud på. I stedet for '\n' indsættes under Windows '\r\n'. Prøv evt. at skrive sådan i toppen af dit script:

  myStr = top.document.messageForm.defaultMessage.value;
  myStr = myStr.replace( /\r/g, "" );

og se, om det hjælper  :)

/mvh
</bole>
Avatar billede agerled Nybegynder
26. marts 2004 - 10:58 #5
ok. nute læg et svar...
Avatar billede nute Nybegynder
26. marts 2004 - 11:09 #6
oki ... men smid et svar selv ... dette er ikke et svært spm. jeg modtager gerne 30 points, men ikke flere

/nute
Avatar billede nute Nybegynder
26. marts 2004 - 11:09 #7
ups
Avatar billede agerled Nybegynder
26. marts 2004 - 11:20 #8
hehe ok..
Avatar billede agerled Nybegynder
26. marts 2004 - 11:24 #9
"hov" jeg kom vist til at skrive 80 istedet for 20 , hehe. tak for hjælpen...

....der er dog stadig en fejl i mit script.  Lige i starten skriver den teksten rigtig, men hvis jeg først vælger at sms'en skal sendes 24 timer før så skriver den "i morgen" i teksten som den skal, men hvis jeg bagefter sætter den til 2 timer før så ændre den det ikke til "i dag"........?????????????
Avatar billede nute Nybegynder
26. marts 2004 - 11:27 #10
agerled >> smid et svar her:

http://www.eksperten.dk/spm/482222

/nute
Avatar billede nute Nybegynder
26. marts 2004 - 11:28 #11
har du ikke et link til hvor vi kan kigge på det ?
Avatar billede agerled Nybegynder
26. marts 2004 - 11:34 #12
nej det må jeg desværre ikke give ud, men det er koden for oven der står for det.

select boxen ser således ud:

<select name="alertMinutes" size="1" id="input" style="width:140px" onchange="insertMessage();">
<option value="4320">Standard: 3 dage f&oslash;r aftale</option>
<option value="2880">Standard: 2 dage f&oslash;r aftale</option>
<option value="1440">1 dag f&oslash;r</option>
<option value="600">10 timer f&oslash;r</option>
<option value="300">5 timer f&oslash;r</option>
<option value="240">4 timer f&oslash;r</option>
<option value="180">3 timer f&oslash;r</option>
<option value="120" SELECTED>2 timer f&oslash;r</option>
<option value="60">1 time f&oslash;r</option>
<option value="45">45 min. f&oslash;r</option>
<option value="30">30 min. f&oslash;r</option>
<option value="15">15 min. f&oslash;r</option>
<option value="5">5 min. f&oslash;r</option>
</select>
Avatar billede nute Nybegynder
26. marts 2004 - 11:51 #13
oki ... det bliver nok ret svært for mig at løse det, så. jeg foreslår at du kigger godt i din 'calculateSendDate' function. Det var dér jeg fandt fejlen ... alert dine værdier én efter én for at se hvor det går galt. scriptet fungerer fint for mig når jeg tester med 'alertMinutes = 120', så hvis jeg ikke kan se din side, så bliver det svært at fixe for mig.

/nute
Avatar billede agerled Nybegynder
26. marts 2004 - 11:58 #14
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester