Avatar billede andersasp Nybegynder
01. juni 2005 - 17:08 Der er 4 kommentarer og
2 løsninger

Kalender opdele dato i dd mm yy

Hejsa eksperter

Jeg bruger et kalender script som virker helt perfekt, men man skal manuelt ændre det således det virker med amerikansk/europæisk dato format. Og dette kan give nogle underlige dato hvis dag og måned vender forkert i forhold til den server scriptet ligger på. 06-05-2005 = 6 maj 2005 men med amerikansk er det jo 5 juni 2005!... :(

Scriptet virker på den måde at man får et popup vindue med en kalender hvor man så vælger en dato. Når man har valgt en dato bliver den så indsat i et form felt.

Kan man få scriptet til at indsætte datoen i 4 felter i stedet for én??

Felt1: dd-mm-yyyy
Felt1: dd
Felt1: mm
Felt1: yyyy

Så kunne jeg nemlig indsætte dato formatet som jeg selv gerne ville.

Beklager at koden er så lang, jeg kender desværre meget lidt til java script så jeg måtte hellere tage det hele med :)

Scriptet er her:

Således henter jeg det fra siden:
                <script language="JavaScript" src="kalender/calendar1.js"></script>
                <script language="JavaScript" src="kalender/calendar2.js"></script>

lige under min form
--------------------------------------------
<script language="JavaScript">
            <!-- // create calendar object(s) just after form tag closed
                // specify form element as the only parameter (document.forms['formname'].elements['inputname']);
                // note: you can have as many calendar objects as you need for your application
                var cal1 = new calendar1(document.forms['form1'].elements['Cstatusdate']);
                cal1.year_scroll = true;
                cal1.time_comp = false;
                var cal2 = new calendar1(document.forms['form1'].elements['Cstatusdate']);
                cal2.year_scroll = false;
                cal2.time_comp = false;
                var cal3 = new calendar1(document.forms['form1'].elements['Cstatusdate']);
                cal3.year_scroll = true;
                cal3.time_comp = true;
                var cal4 = new calendar1(document.forms['form1'].elements['Cstatusdate']);
                cal4.year_scroll = false;
                cal4.time_comp = true;
   
                var cal5 = new calendar2(document.forms['form1'].elements['Cstatusdate']);
                cal5.year_scroll = true;
                cal5.time_comp = false;
                var cal6 = new calendar2(document.forms['form1'].elements['Cstatusdate']);
                cal6.year_scroll = false;
                cal6.time_comp = false;
                var cal7 = new calendar2(document.forms['form1'].elements['Cstatusdate']);
                cal7.year_scroll = true;
                cal7.time_comp = true;
                var cal8 = new calendar2(document.forms['form1'].elements['Cstatusdate']);
                cal8.year_scroll = false;
                cal8.time_comp = true;
            //-->
            </script>

calendar.js
-----------------------------------------------
// Title: Tigra Calendar
// URL: http://www.softcomplex.com/products/tigra_calendar/
// Version: 3.2 (European date format)
// Date: 10/14/2002 (mm/dd/yyyy)
// Note: Permission given to use this script in ANY kind of applications if
//    header lines are left unchanged.
// Note: Script consists of two files: calendar?.js and calendar.html

// if two digit year input dates after this year considered 20 century.
var NUM_CENTYEAR = 30;
// is time input control required by default
var BUL_TIMECOMPONENT = false;
// are year scrolling buttons required by default
var BUL_YEARSCROLL = true;

var calendars = [];
var RE_NUM = /^\-?\d+$/;

function calendar1(obj_target) {

    // assigning methods
    this.gen_date = cal_gen_date1;
    this.gen_time = cal_gen_time1;
    this.gen_tsmp = cal_gen_tsmp1;
    this.prs_date = cal_prs_date1;
    this.prs_time = cal_prs_time1;
    this.prs_tsmp = cal_prs_tsmp1;
    this.popup    = cal_popup1;

    // validate input parameters
    if (!obj_target)
        return cal_error("Error calling the calendar: no target control specified");
    if (obj_target.value == null)
        return cal_error("Error calling the calendar: parameter specified is not valid target control");
    this.target = obj_target;
    this.time_comp = BUL_TIMECOMPONENT;
    this.year_scroll = BUL_YEARSCROLL;
   
    // register in global collections
    this.id = calendars.length;
    calendars[this.id] = this;
}

function cal_popup1 (str_datetime) {
    this.dt_current = this.prs_tsmp(str_datetime ? str_datetime : this.target.value);
    if (!this.dt_current) return;

    var obj_calwindow = window.open(
        'calendar.html?datetime=' + this.dt_current.valueOf()+ '&id=' + this.id,
        'Calendar', 'width=200,height='+(this.time_comp ? 215 : 190)+
        ',status=no,resizable=no,top=200,left=200,dependent=yes,alwaysRaised=yes'
    );
    obj_calwindow.opener = window;
    obj_calwindow.focus();
}

// timestamp generating function
function cal_gen_tsmp1 (dt_datetime) {
    return(this.gen_date(dt_datetime) + ' ' + this.gen_time(dt_datetime));
}

// date generating function
function cal_gen_date1 (dt_datetime) {
    return (
        (dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate() + "-"
        + (dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "-"
        + dt_datetime.getFullYear()
    );
}
// time generating function
function cal_gen_time1 (dt_datetime) {
    return (
        (dt_datetime.getHours() < 10 ? '0' : '') + dt_datetime.getHours() + ":"
        + (dt_datetime.getMinutes() < 10 ? '0' : '') + (dt_datetime.getMinutes()) + ":"
        + (dt_datetime.getSeconds() < 10 ? '0' : '') + (dt_datetime.getSeconds())
    );
}

// timestamp parsing function
function cal_prs_tsmp1 (str_datetime) {
    // if no parameter specified return current timestamp
    if (!str_datetime)
        return (new Date());

    // if positive integer treat as milliseconds from epoch
    if (RE_NUM.exec(str_datetime))
        return new Date(str_datetime);
       
    // else treat as date in string format
    var arr_datetime = str_datetime.split(' ');
    return this.prs_time(arr_datetime[1], this.prs_date(arr_datetime[0]));
}

// date parsing function
function cal_prs_date1 (str_date) {

    var arr_date = str_date.split('-');

    if (arr_date.length != 3) return cal_error ("Invalid date format: '" + str_date + "'.\nFormat accepted is dd-mm-yyyy.");
    if (!arr_date[0]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo day of month value can be found.");
    if (!RE_NUM.exec(arr_date[0])) return cal_error ("Invalid day of month value: '" + arr_date[0] + "'.\nAllowed values are unsigned integers.");
    if (!arr_date[1]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo month value can be found.");
    if (!RE_NUM.exec(arr_date[1])) return cal_error ("Invalid month value: '" + arr_date[1] + "'.\nAllowed values are unsigned integers.");
    if (!arr_date[2]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo year value can be found.");
    if (!RE_NUM.exec(arr_date[2])) return cal_error ("Invalid year value: '" + arr_date[2] + "'.\nAllowed values are unsigned integers.");

    var dt_date = new Date();
    dt_date.setDate(1);

    if (arr_date[1] < 1 || arr_date[1] > 12) return cal_error ("Invalid month value: '" + arr_date[1] + "'.\nAllowed range is 01-12.");
    dt_date.setMonth(arr_date[1]-1);
   
    if (arr_date[2] < 100) arr_date[2] = Number(arr_date[2]) + (arr_date[2] < NUM_CENTYEAR ? 2000 : 1900);
    dt_date.setFullYear(arr_date[2]);

    var dt_numdays = new Date(arr_date[2], arr_date[1], 0);
    dt_date.setDate(arr_date[0]);
    if (dt_date.getMonth() != (arr_date[1]-1)) return cal_error ("Invalid day of month value: '" + arr_date[0] + "'.\nAllowed range is 01-"+dt_numdays.getDate()+".");

    return (dt_date)
}

// time parsing function
function cal_prs_time1 (str_time, dt_date) {

    if (!dt_date) return null;
    var arr_time = String(str_time ? str_time : '').split(':');

    if (!arr_time[0]) dt_date.setHours(0);
    else if (RE_NUM.exec(arr_time[0]))
        if (arr_time[0] < 24) dt_date.setHours(arr_time[0]);
        else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed range is 00-23.");
    else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed values are unsigned integers.");
   
    if (!arr_time[1]) dt_date.setMinutes(0);
    else if (RE_NUM.exec(arr_time[1]))
        if (arr_time[1] < 60) dt_date.setMinutes(arr_time[1]);
        else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed range is 00-59.");
    else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed values are unsigned integers.");

    if (!arr_time[2]) dt_date.setSeconds(0);
    else if (RE_NUM.exec(arr_time[2]))
        if (arr_time[2] < 60) dt_date.setSeconds(arr_time[2]);
        else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed range is 00-59.");
    else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed values are unsigned integers.");

    dt_date.setMilliseconds(0);
    return dt_date;
}

function cal_error (str_message) {
    alert (str_message);
    return null;
}

####### Dette er Html siden som udskriver kalenderen############3

<!--
Title: Tigra Calendar
URL: http://www.softcomplex.com/products/tigra_calendar/
Version: 3.2
Date: 10/14/2002 (mm/dd/yyyy)
Note: Permission given to use this script in ANY kind of applications if
  header lines are left unchanged.
Note: Script consists of two files: calendar?.js and calendar.html
-->
<html>
<head>
<title>Select Date, Please.</title>
<style>
    td {font-family: Tahoma, Verdana, sans-serif; font-size: 12px;}
</style>
<script language="JavaScript">

// months as they appear in the calendar's title
var ARR_MONTHS = ["January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"];
// week day titles as they appear on the calendar
var ARR_WEEKDAYS = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
// day week starts from (normally 0-Su or 1-Mo)
var NUM_WEEKSTART = 1;
// path to the directory where calendar images are stored. trailing slash req.
var STR_ICONPATH = 'img/';

var re_url = new RegExp('datetime=(\\-?\\d+)');
var dt_current = (re_url.exec(String(window.location))
    ? new Date(new Number(RegExp.$1)) : new Date());
var re_id = new RegExp('id=(\\d+)');
var num_id = (re_id.exec(String(window.location))
    ? new Number(RegExp.$1) : 0);
var obj_caller = (window.opener ? window.opener.calendars[num_id] : null);

if (obj_caller && obj_caller.year_scroll) {
    // get same date in the previous year
    var dt_prev_year = new Date(dt_current);
    dt_prev_year.setFullYear(dt_prev_year.getFullYear() - 1);
    if (dt_prev_year.getDate() != dt_current.getDate())
        dt_prev_year.setDate(0);
   
    // get same date in the next year
    var dt_next_year = new Date(dt_current);
    dt_next_year.setFullYear(dt_next_year.getFullYear() + 1);
    if (dt_next_year.getDate() != dt_current.getDate())
        dt_next_year.setDate(0);
}

// get same date in the previous month
var dt_prev_month = new Date(dt_current);
dt_prev_month.setMonth(dt_prev_month.getMonth() - 1);
if (dt_prev_month.getDate() != dt_current.getDate())
    dt_prev_month.setDate(0);

// get same date in the next month
var dt_next_month = new Date(dt_current);
dt_next_month.setMonth(dt_next_month.getMonth() + 1);
if (dt_next_month.getDate() != dt_current.getDate())
    dt_next_month.setDate(0);

// get first day to display in the grid for current month
var dt_firstday = new Date(dt_current);
dt_firstday.setDate(1);
dt_firstday.setDate(1 - (7 + dt_firstday.getDay() - NUM_WEEKSTART) % 7);

// function passing selected date to calling window
function set_datetime(n_datetime, b_close) {
    if (!obj_caller) return;

    var dt_datetime = obj_caller.prs_time(
        (document.cal ? document.cal.time.value : ''),
        new Date(n_datetime)
    );

    if (!dt_datetime) return;
    if (b_close) {
        window.close();
        obj_caller.target.value = (document.cal
            ? obj_caller.gen_tsmp(dt_datetime)
            : obj_caller.gen_date(dt_datetime)
        );
    }
    else obj_caller.popup(dt_datetime.valueOf());
}

</script>
</head>
<body bgcolor="#FFFFFF" marginheight="5" marginwidth="5" topmargin="5" leftmargin="5" rightmargin="5">
<table class="clsOTable" cellspacing="0" border="0" width="100%">
<tr><td bgcolor="#4682B4">
<table cellspacing="1" cellpadding="3" border="0" width="100%">
<tr><td colspan="7"><table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<script language="JavaScript">
document.write(
'<td>'+(obj_caller&&obj_caller.year_scroll?'<a href="java script:set_datetime('+dt_prev_year.valueOf()+')"><img src="'+STR_ICONPATH+'prev_year.gif" width="16" height="16" border="0" alt="previous year"></a>&nbsp;':'')+'<a href="java script:set_datetime('+dt_prev_month.valueOf()+')"><img src="'+STR_ICONPATH+'prev.gif" width="16" height="16" border="0" alt="previous month"></a></td>'+
'<td align="center" width="100%"><font color="#ffffff">'+ARR_MONTHS[dt_current.getMonth()]+' '+dt_current.getFullYear() + '</font></td>'+
'<td><a href="java script:set_datetime('+dt_next_month.valueOf()+')"><img src="'+STR_ICONPATH+'next.gif" width="16" height="16" border="0" alt="next month"></a>'+(obj_caller && obj_caller.year_scroll?'&nbsp;<a href="java script:set_datetime('+dt_next_year.valueOf()+')"><img src="'+STR_ICONPATH+'next_year.gif" width="16" height="16" border="0" alt="next year"></a>':'')+'</td>'
);
</script>
</tr>
</table></td></tr>
<tr>
<script language="JavaScript">

// print weekdays titles
for (var n=0; n<7; n++)
    document.write('<td bgcolor="#87cefa" align="center"><font color="#ffffff">'+ARR_WEEKDAYS[(NUM_WEEKSTART+n)%7]+'</font></td>');
document.write('</tr>');

// print calendar table
var dt_current_day = new Date(dt_firstday);
while (dt_current_day.getMonth() == dt_current.getMonth() ||
    dt_current_day.getMonth() == dt_firstday.getMonth()) {
    // print row heder
    document.write('<tr>');
    for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
        if (dt_current_day.getDate() == dt_current.getDate() &&
            dt_current_day.getMonth() == dt_current.getMonth())
            // print current date
            document.write('<td bgcolor="#ffb6c1" align="center" width="14%">');
        else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
            // weekend days
            document.write('<td bgcolor="#dbeaf5" align="center" width="14%">');
        else
            // print working days of current month
            document.write('<td bgcolor="#ffffff" align="center" width="14%">');

        document.write('<a href="java script:set_datetime('+dt_current_day.valueOf() +', true);">');

        if (dt_current_day.getMonth() == this.dt_current.getMonth())
            // print days of current month
            document.write('<font color="#000000">');
        else
            // print days of other months
            document.write('<font color="#606060">');
           
        document.write(dt_current_day.getDate()+'</font></a></td>');
        dt_current_day.setDate(dt_current_day.getDate()+1);
    }
    // print row footer
    document.write('</tr>');
}
if (obj_caller && obj_caller.time_comp)
    document.write('<form onsubmit="java script:set_datetime('+dt_current.valueOf()+', true)" name="cal"><tr><td colspan="7" bgcolor="#87CEFA"><font color="White" face="tahoma, verdana" size="2">Time: <input type="text" name="time" value="'+obj_caller.gen_time(this.dt_current)+'" size="8" maxlength="8"></font></td></tr></form>');
</script>
</table></tr></td>
</table>
</body>
</html>
Avatar billede steen-h Mester
01. juni 2005 - 18:35 #1
Var det ikke nemmer at sortere datoen bagefer.
Jeg har brugt følgende, hvor $dato indeholder datoen fra et kalender script

$dd = substr($dato, 3,2);
$mm = substr($dato, 0,2);
$yyyy = substr($dato, 6,4);

mvh Steen
Avatar billede roenving Novice
03. juni 2005 - 02:48 #2
Den er zq da lavet for dårligt, når den er proprietær, kaldet "european date-format" og alligevel benytter amerikansk/engelsk dato-format ...

-- men det er hele date-parsing-rutinen, som skal omskrives:

// date parsing function
function cal_prs_date1 (str_date) {

    var arr_date = str_date.split('-');

    if (arr_date.length != 3) return cal_error ("Invalid date format: '" + str_date + "'.\nFormat accepted is dd-mm-yyyy.");
    if (!arr_date[1]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo day of month value can be found.");
    if (!RE_NUM.exec(arr_date[0])) return cal_error ("Invalid day of month value: '" + arr_date[0] + "'.\nAllowed values are unsigned integers.");
    if (!arr_date[1]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo month value can be found.");
    if (!RE_NUM.exec(arr_date[1])) return cal_error ("Invalid month value: '" + arr_date[1] + "'.\nAllowed values are unsigned integers.");
    if (!arr_date[2]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo year value can be found.");
    if (!RE_NUM.exec(arr_date[2])) return cal_error ("Invalid year value: '" + arr_date[2] + "'.\nAllowed values are unsigned integers.");

    var dt_date = new Date();
    dt_date.setDate(0);

    if (arr_date[1] < 1 || arr_date[1] > 12) return cal_error ("Invalid month value: '" + arr_date[1] + "'.\nAllowed range is 01-12.");
    dt_date.setMonth(arr_date[1]-1);
   
    if (arr_date[2] < 100) arr_date[2] = Number(arr_date[2]) + (arr_date[2] < NUM_CENTYEAR ? 2000 : 1900);
    dt_date.setFullYear(arr_date[2]);

    var dt_numdays = new Date(arr_date[2], arr_date[1], 0);
    dt_date.setDate(arr_date[0]);
    if (dt_date.getMonth() != (arr_date[1]-1)) return cal_error ("Invalid day of month value: '" + arr_date[0] + "'.\nAllowed range is 01-"+dt_numdays.getDate()+".");

    return (dt_date)
}
Avatar billede andersasp Nybegynder
03. juni 2005 - 14:27 #3
Ok tak for svar, smid lige et svar hvis i vil have nogle points for jeres besvær:

Fik dog en løsning med nedenstående, var ved at være godt træt af de forskellige datoformater :)

//START::New additions
// european date generator

function cal_gen_date_american (dt_datetime) {   
    return (
        (dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "/"
        + (dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate() + "/"
        + dt_datetime.getFullYear()
    );
}

function cal_gen_date_euro (dt_datetime) {
    return (
        (dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate() + "-"
        + (dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "-"
        + dt_datetime.getFullYear()
    );
}

function cal_gen_get_day (dt_datetime) {
    return (
        (dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate()
    );
}

function cal_gen_get_month (dt_datetime) {
    return (
        (dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1)
    );
}

function cal_gen_get_year (dt_datetime) {
    return (       
        dt_datetime.getFullYear()
    );
}

//END::New additions
Avatar billede roenving Novice
03. juni 2005 - 14:30 #4
Oki '-)
Avatar billede andersasp Nybegynder
22. juni 2005 - 17:24 #5
Tusinde tak for hjælpen
Avatar billede roenving Novice
22. juni 2005 - 17:27 #6
-- og tak for point ;~}
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