Avatar billede MSR Juniormester
22. juli 2008 - 19:19 Der 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?
Avatar billede margitbork Nybegynder
22. juli 2008 - 19:49 #1
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;
}


Mon ikke noget i den stil kan gøre det.
Avatar billede margitbork Nybegynder
22. juli 2008 - 19:51 #2
Jeg har ikke kigget på date parseren, men det skal vel bare rettes til på samme vis
Avatar billede MSR Juniormester
22. juli 2008 - 20:12 #3
hey det virker perfekt. jeg er bare ingen ørn til java så gider du hjælpe mig med at få dato og måned til at kunne sige "+0" også?
på forhånd tak
Avatar billede MSR Juniormester
22. juli 2008 - 20:16 #4
hmmmm og dog? nu kan jeg ikke længere bladre i månederne? æv
Avatar billede MSR Juniormester
22. juli 2008 - 20:20 #5
java script:window.opener.show_calendar('document.opret_arrangement_form.tidslut', '2008-8-22 '+document.cal.time.value);

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);
   
    // html generation (feel free to tune it for your particular application)
    // print calendar header
    var str_buffer = new String (
        "<html>\n"+
        "<head>\n"+
        "    <title>Calendar</title>\n"+
        "</head>\n"+
        "<body bgcolor=\"White\">\n"+
        "<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
        "<tr><td bgcolor=\"#4682B4\">\n"+
        "<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
        "<tr>\n    <td bgcolor=\"#4682B4\"><a href=\"java script:window.opener.show_calendar('"+
        str_target+"', '"+ dt2dtstr(dt_prev_month)+"'+document.cal.time.value);\">"+
        "<img src=\"prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
        " alt=\"previous month\"></a></td>\n"+
        "    <td bgcolor=\"#4682B4\" colspan=\"5\">"+
        "<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">"
        +arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</font></td>\n"+
        "    <td bgcolor=\"#4682B4\" align=\"right\"><a href=\"java script:window.opener.show_calendar('"
        +str_target+"', '"+dt2dtstr(dt_next_month)+"'+document.cal.time.value);\">"+
        "<img src=\"next.gif\" width=\"16\" height=\"16\" border=\"0\""+
        " alt=\"next month\"></a></td>\n</tr>\n"
    );

    var dt_current_day = new Date(dt_firstday);
    // print weekdays titles
    str_buffer += "<tr>\n";
    for (var n=0; n<7; n++)
        str_buffer += "    <td bgcolor=\"#87CEFA\">"+
        "<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">"+
        week_days[(n_weekstart+n)%7]+"</font></td>\n";
    // print calendar table
    str_buffer += "</tr>\n";
    while (dt_current_day.getMonth() == dt_datetime.getMonth() ||
        dt_current_day.getMonth() == dt_firstday.getMonth()) {
        // print row heder
        str_buffer += "<tr>\n";
        for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
                if (dt_current_day.getDate() == dt_datetime.getDate() &&
                    dt_current_day.getMonth() == dt_datetime.getMonth())
                    // print current date
                    str_buffer += "    <td bgcolor=\"#FFB6C1\" align=\"right\">";
                else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
                    // weekend days
                    str_buffer += "    <td bgcolor=\"#DBEAF5\" align=\"right\">";
                else
                    // print working days of current month
                    str_buffer += "    <td bgcolor=\"white\" align=\"right\">";

                if (dt_current_day.getMonth() == dt_datetime.getMonth())
                    // print days of current month
                    str_buffer += "<a href=\"java script:window.opener."+str_target+
                    ".value='"+dt2dtstr(dt_current_day)+"'+document.cal.time.value; window.close();\">"+
                    "<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
                else
                    // print days of other months
                    str_buffer += "<a href=\"java script:window.opener."+str_target+
                    ".value='"+dt2dtstr(dt_current_day)+"'+document.cal.time.value; window.close();\">"+
                    "<font color=\"gray\" face=\"tahoma, verdana\" size=\"2\">";
                str_buffer += dt_current_day.getDate()+"</font></a></td>\n";
                dt_current_day.setDate(dt_current_day.getDate()+1);
        }
        // print row footer
        str_buffer += "</tr>\n";
    }
    // print calendar footer
    str_buffer +=
        "<form name=\"cal\">\n<tr><td colspan=\"7\" bgcolor=\"#87CEFA\">"+
        "<font color=\"White\" face=\"tahoma, verdana\" size=\"2\">"+
        "Time: <input type=\"text\" name=\"time\" value=\""+dt2tmstr(dt_datetime)+
        "\" size=\"8\" maxlength=\"8\"></font></td></tr>\n</form>\n" +
        "</table>\n" +
        "</tr>\n</td>\n</table>\n" +
        "</body>\n" +
        "</html>\n";

    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;
}
Avatar billede margitbork Nybegynder
22. juli 2008 - 22:57 #6
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){

if(st_number.length==1){
  st_number= '0'+st_number;
}
return st_number;
}



og

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.
Avatar billede margitbork Nybegynder
03. august 2008 - 00:05 #7
Har du fået det til at virke ?
Avatar billede MSR Juniormester
03. august 2008 - 12:19 #8
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?
Avatar billede MSR Juniormester
20. august 2010 - 19:12 #9
lukket
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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