22. juli 2008 - 19:19Der er
8 kommentarer og 1 løsning
Forkert dato-format
hey. jeg har fundet den her tspicker men jeg får forkert output ud af den. det ser sådan jer ud: // datetime parsing and formatting routimes. modify them if you wish other datetime format function str2dt (str_datetime) { var re_date = /^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/; if (!re_date.exec(str_datetime)) return alert("Invalid Datetime format: "+ str_datetime); return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1, RegExp.$4, RegExp.$5, RegExp.$6)); } function dt2dtstr (dt_datetime) { return (new String ( dt_datetime.getDate()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getFullYear()+" ")); } function dt2tmstr (dt_datetime) { return (new String ( dt_datetime.getHours()+":"+dt_datetime.getMinutes()+":"+dt_datetime.getSeconds())); }
og det giver mig f.eks. "30-7-2008 19:7:26" men jeg har brug for åååå-mm-dd. tiden er korrekt bortset fra at både dato og tid ikke hedder 07 men bare 7. kan det laves så det passer ind i min DB?
function dt2dtstr (dt_datetime) { return (new String ( dt_datetime.getFullYear()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getDate()+" ")); }
function dt2tmstr (dt_datetime) { return (new String ( dt_datetime.getHours()+":"+dt2minutes(dt_datetime)+":"+dt_datetime.getSeconds())); }
function dt2minutes(dt_datetime){ var minutes = new String(dt_datetime.getMinutes()); if(minutes.length==1){ minutes = '0'+minutes; } return minutes; }
er linket fra knappen der skulle sige "næste måned" men det er vist klat den ikke virker nu vi har lavet formatet om. jeg burde måske have pastet hele koden?:
function show_calendar(str_target, str_datetime) { var arr_months = ["Januar", "Februar", "Marst", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"]; var week_days = ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"]; var n_weekstart = 1; // day week starts from (normally 0 or 1)
var dt_datetime = (str_datetime == null || str_datetime =="" ? new Date() : str2dt(str_datetime)); var dt_prev_month = new Date(dt_datetime); dt_prev_month.setMonth(dt_datetime.getMonth()-1); var dt_next_month = new Date(dt_datetime); dt_next_month.setMonth(dt_datetime.getMonth()+1); var dt_firstday = new Date(dt_datetime); dt_firstday.setDate(1); dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7); var dt_lastday = new Date(dt_next_month); dt_lastday.setDate(0);
var vWinCal = window.open("", "Calendar", "width=250,height=250,status=no,resizable=no,top=400,left=800"); vWinCal.opener = self; var calc_doc = vWinCal.document; calc_doc.write (str_buffer); calc_doc.close(); } // datetime parsing and formatting routimes. modify them if you wish other datetime format //ændret af eksperten.dk
function dt2dtstr (dt_datetime) { return (new String ( dt_datetime.getFullYear()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getDate()+" ")); }
function dt2tmstr (dt_datetime) { return (new String ( dt_datetime.getHours()+":"+dt2minutes(dt_datetime)+":"+dt_datetime.getSeconds())); }
function dt2minutes(dt_datetime){ var minutes = new String(dt_datetime.getMinutes()); if(minutes.length==1){ minutes = '0'+minutes; } return minutes; }
Har du set på om parseren stadig virker. Der er jo flyttet om på dage og år, så parseren skal passes til, til det nye format. Du havde funktionen der forventede en dato i formatet dd-mm-yyyy hh:mm:ss function str2dt (str_datetime) { var re_date = /^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/; if (!re_date.exec(str_datetime)) return alert("Invalid Datetime format: "+ str_datetime); return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1, RegExp.$4, RegExp.$5, RegExp.$6)); }
og nu er formatet yyyy-mm-dd hh:mm:ss Så metoden skal rettes til sikkert således: function str2dt (str_datetime) { var re_date = /^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/; if (!re_date.exec(str_datetime)) return alert("Invalid Datetime format: "+ str_datetime); return (new Date (RegExp.$1, RegExp.$2-1, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6)); }
Jeg har blot byttet om på 1 og 3, da det er hhv år og time. Jeg har ikke testet noget af det jeg har foreslået da jeg har sommerferie og ikke sidder ved en pc med et udviklingsværktøj - men prøv engang.
Hvis du også gerne vil have tilføjet et nul til dag og måned til at have tilføjet et nul vil jeg foreslå at lave metoden om så den tager et String argument ( som er minut, dag eller time) og returnerer det samme med et nul foran hvis argumentet havde længden 1.
function dt2minutes(dt_datetime){ var minutes = new String(dt_datetime.getMinutes()); if(minutes.length==1){ minutes = '0'+minutes; } return minutes; } bliver så til : function number2number(st_number){
function dt2tmstr (dt_datetime) { return (new String ( dt_datetime.getHours()+":"+number2number(dt_datetime.getMinutes())+":"+dt_datetime.getSeconds())); }
Du kan så sende de andre numre du vil have '0' foran igennem samme metode.
nej... jeg gik på ferie og har ikke rodet med det siden. det ser stadig så her ud:
function dt2dtstr (dt_datetime) { return (new String ( dt_datetime.getFullYear()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getDate()+" ")); }
function dt2tmstr (dt_datetime) { return (new String ( dt_datetime.getHours()+":"+dt2minutes(dt_datetime)+":"+dt_datetime.getSeconds())); }
function dt2minutes(dt_datetime){ var minutes = new String(dt_datetime.getMinutes()); if(minutes.length==1){ minutes = '0'+minutes; } return minutes; }
jeg aner slet ikke nok om js til at vide hvordan jeg retter op på det. forstår ikke dit eksempel?
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.