CanvasItem to manipulate datetime value with separate Date and Time controls

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" }