Parsing del controllo SharePoint:DateTimeControl in JavaScript
Tramite JavaScript è possibile leggere il valore del controllo SharePoint SharePoint:DateTimeControl lato client:
essendo un controllo composto che in pagina viene renderizzato con questi controlli (nel caso ci sia anche la parte dell'ora e minuti):
per leggere il valore ho creato questa funzione (richiede jQuery):
che va richiamata, per le date italiane nel formato dd/MM/yyyy, come ad esempio 21/12/2012:
per le date in inglese nel formato MM-dd-yyyy come ad esempio 12-21-2012:
Nel caso servisse una data nel formato ISO yyyy-MM-ddTHH:mm:ssZ, si può usare questa funzione sgartFormatDateToISO:
Il formato ISO è utile perchè è indipendente dalla lingua e può essere parsato da tutti i sistemi in modo inequivocabile.
Va richiamata come:
HTML
<SharePoint:DateTimeControl id="dtcBegin" runat="server" DateOnly="false" IsRequiredField="true" />
HTML
<input id="ctl00_PlaceHolderMain_dtcBegin_dtcBeginDate" name=ctl00$PlaceHolderMain$dtcBegin$dtcBeginDate type="text">
<select id="ctl00_PlaceHolderMain_dtcBegin_dtcBeginDateHours" name="ctl00$PlaceHolderMain$dtcBegin$dtcBeginDateHours"> <OPTION value="00.">00.</OPTION> <OPTION value="01.">01.</OPTION>
<select id="ctl00_PlaceHolderMain_dtcBegin_dtcBeginDateMinutes" name="ctl00$PlaceHolderMain$dtcBegin$dtcBeginDateMinutes"> <OPTION selected value="00">00</OPTION> <OPTION
JavaScript
function sgartGetSPDateFieldValue(field, eng) {
var objDate = $(":input[id$='" + field + "Date']");
var objHours = $(":input[id$='" + field + "DateHours']");
var objMinutes = $(":input[id$='" + field + "DateMinutes']");
//split stringa data con separatori / o -
var re = /\/|\-/; ;
var datePart = objDate.val().split(re);
//parse data
var dDay = 1;
var dMonth = 1;
var dYear = 1;
if (eng == true) {
// date looks like MM/dd/yyyy
dDay = datePart[1];
dMonth = datePart[0];
} else {
// date looks like dd/MM/yyyy
dDay = datePart[0];
dMonth = datePart[1];
}
var dYear = datePart[2];
var dHours = 0;
var dMinutes = 0;
if(objHours.length > 0) {
//se ho anche l'ora procedo
dHours = objHours.val().substring(0, 2);
dMinutes = objMinutes.val();
}
var rDate = new Date(dYear, dMonth - 1, dDay, dHours, dMinutes, 0);
return rDate;
}
JavaScript
var dtBegin = sgartGetSPDateFieldValue("dtcBegin");
alert(dtBegin);
JavaScript
var dtBegin = sgartGetSPDateFieldValue("dtcBegin",true);
alert(dtBegin);
Nel caso servisse una data nel formato ISO yyyy-MM-ddTHH:mm:ssZ, si può usare questa funzione sgartFormatDateToISO:
JavaScript
//format date to yyyy-MM-ddTHH:mm:ssZ
function sgartFormatDateToISO(dt) {
// return dt.toISOString(); //non supportata da tutti i browser
var dYear = dt.getUTCFullYear();
var dMonth = formatNumberTo2Digit(dt.getUTCMonth() + 1);
var dDay = formatNumberTo2Digit(dt.getUTCDate());
var dHours = formatNumberTo2Digit(dt.getUTCHours());
var dMinutes = formatNumberTo2Digit(dt.getUTCMinutes());
var dSeconds = formatNumberTo2Digit(dt.getUTCSeconds());
return dYear + "-" + dMonth + "-" + dDay + "T" + dHours + ":" + dMinutes + ":" + dSeconds + "Z";
}
function formatNumberTo2Digit(n) {
return n > 9 ? n : "0" + n;
}
Va richiamata come:
JavaScript
var dtBegin = new Date();
alert(sgartFormatDateToISO(dtBegin));