CanvasItem to manipulate datetime value with separate Date and Time controls
isc.defineClass("SplitDateTimeItem", "CanvasItem").addProperties({
height:25, width:"*", align:"center",
colSpan:"*", endRow:false, startRow:false,
dateTitle:"Date", timeTitle:"Time",
createCanvas:function () {
return isc.DynamicForm.create({
width:this.width, height:this.height,
wrapItemTitles:this.containerWidget.wrapItemTitles,
numCols:4,
items:[
{
name:"dateOnly", type:"date", width:100, canEdit:false, startRow:false, endRow:false, title:this.dateTitle,
changed:function(form, item, value) {
var time = form.getValue("timeOnly");
var logicalDate = isc.Date.create(value.getFullYear(), value.getMonth(), value.getDate());
form.canvasItem.storeValue(new Date(logicalDate.getTime() + isc.Time.createLogicalTime(time.getHours(), time.getMinutes() - logicalDate.getTimezoneOffset(), time.getSeconds()).getTime()));
}
},
{
name:"timeOnly", type:"time", width:50, startRow:false, endRow:false, title:this.timeTitle,
changed:function(form, item, value) {
var date = form.getValue("dateOnly");
var logicalDate = isc.Date.create(date.getFullYear(), date.getMonth(), date.getDate());
form.canvasItem.storeValue(new Date(logicalDate.getTime() + isc.Time.createLogicalTime(value.getHours(), value.getMinutes() - logicalDate.getTimezoneOffset(), value.getSeconds()).getTime()));
}
}
]
});
},
showValue:function (displayValue, dataValue, form, item) {
if (this.canvas == null) {
return;
}
var logicalDate = dataValue ? isc.Date.createLogicalDate(dataValue.getFullYear(), dataValue.getMonth(), dataValue.getDate()) : null;
var logicalTime = dataValue ? isc.Time.createLogicalTime(dataValue.getHours(), dataValue.getMinutes(), dataValue.getSeconds()) : null;
this.canvas.setValue("dateOnly", logicalDate);
this.canvas.setValue("timeOnly", logicalTime);
this.storeValue(dataValue);
}
});
sample usage:
{
name:"DATE_ITME_ITEM",
editorType:"SplitDateTimeItem", showTitle:false, colSpan:2, timeTitle:"Time", dateTitle:"Date"
}