Index: t3lib/class.t3lib_tceforms.php
===================================================================
--- t3lib/class.t3lib_tceforms.php	(Revision 2438)
+++ t3lib/class.t3lib_tceforms.php	(Arbeitskopie)
@@ -282,6 +282,7 @@
 	var $palettesRendered=array();				// During rendering of forms this will keep track of which palettes has already been rendered (so they are not rendered twice by mistake)
 	var $hiddenFieldListArr = array();			// This array of fields will be set as hidden-fields instead of rendered normally! For instance palette fields edited in the top frame are set as hidden fields since the main form has to submit the values. The top frame actually just sets the value in the main form!
 	var $requiredFields=array();				// Used to register input-field names, which are required. (Done during rendering of the fields). This information is then used later when the JavaScript is made.
+	var $requiredDataTimeFields=array();		// Used to register input-field names, which are required an have a date/time as requirement. The information of this array is merged with $this->requiredFields later.
 	var $requiredElements=array();				// Used to register the min and max number of elements for selectorboxes where that apply (in the "group" type for instance)
 	var $renderDepth=0;							// Keeps track of the rendering depth of nested records.
 	var $savedSchemes=array();					// Color scheme buffer.
@@ -1046,7 +1047,6 @@
 		$size = t3lib_div::intInRange($config['size']?$config['size']:30,5,$this->maxInputWidth);
 		$evalList = t3lib_div::trimExplode(',',$config['eval'],1);
 
-
 		if($this->renderReadonly || $config['readOnly'])  {
 			$itemFormElValue = $PA['itemFormElValue'];
 			if (in_array('date',$evalList))	{
@@ -1066,6 +1066,13 @@
 
 		if (in_array('required',$evalList))	{
 			$this->requiredFields[$table.'_'.$row['uid'].'_'.$field]=$PA['itemFormElName'];
+				// Mark this field for date/time disposal:
+			foreach ($evalList as $evalItem) {
+				if ($evalItem == 'date' || $evalItem == 'datetime' || $evalItem == 'time') {
+					$this->requiredDataTimeFields[$PA['itemFormElName']] = true;
+					break;
+				}
+			}
 		}
 
 		$paramsList = "'".$PA['itemFormElName']."','".implode(',',$evalList)."','".trim($config['is_in'])."',".(isset($config['checkbox'])?1:0).",'".$config['checkbox']."'";
@@ -4659,6 +4666,9 @@
 				$field = $match[2];
 				$elements[$record][$field]['required'] = 1;
 				$elements[$record][$field]['requiredImg'] = $itemImgName;
+				if ($this->requiredDataTimeFields[$itemName]) {
+					$elements[$record][$field]['isDateTime'] = 1;
+				}
 			}
 		}
 			// range:
Index: t3lib/jsfunc.evalfield.js
===================================================================
--- t3lib/jsfunc.evalfield.js	(Revision 2438)
+++ t3lib/jsfunc.evalfield.js	(Arbeitskopie)
@@ -77,7 +77,9 @@
 	var theEvalType = this.split(evallist, ",", index);
 	var newValue=value;
 	while (theEvalType) {
-		newValue = evalFunc.output(theEvalType, value, FObj);
+		if (theEvalType != 'required') {
+			newValue = evalFunc.output(theEvalType, value, FObj);
+		}
 		index++;
 		theEvalType = this.split(evallist, ",", index);
 	}
Index: typo3/jsfunc.tbe_editor.js
===================================================================
--- typo3/jsfunc.tbe_editor.js	(Revision 2438)
+++ typo3/jsfunc.tbe_editor.js	(Arbeitskopie)
@@ -44,14 +44,13 @@
 					'requiredImg':	''
 				}
 			}
-		
 		},
 	*/
-	
+
 	elements: {},
 	recentUpdatedElements: {},
 	actionChecks: { submit:	[] },
-	
+
 	formname: '',
 	formnameUENC: '',
 	loadTime: 0,
@@ -62,10 +61,10 @@
 	prependFormFieldNames: 'data',
 	prependFormFieldNamesUENC: 'data',
 	prependFormFieldNamesCnt: 0,
-	
+
 	isPalettedoc: null,
 	doSaveFieldName: 0,
-	
+
 	labels: {},
 	images: {
 		req: new Image(),
@@ -87,7 +86,7 @@
 	getElement: function(record, field, type) {
 		var result = null;
 		var element;
-		
+
 		if (TBE_EDITOR.elements && TBE_EDITOR.elements[record] && TBE_EDITOR.elements[record][field]) {
 			element = TBE_EDITOR.elements[record][field];
 			if (type) {
@@ -96,7 +95,7 @@
 				result = element;
 			}
 		}
-		
+
 		return result;
 	},
 	checkElements: function(type, recentUpdated, record, field) {
@@ -111,7 +110,7 @@
 				if (elementData) {
 					if (!TBE_EDITOR.checkElementByType(type, elementName, elementData)) result = 0;
 				}
-				
+
 			} else {
 				var elementFieldList, elRecIndex, elRecCnt, elFldIndex, elFldCnt;
 				var elementRecordList = $H(source).keys();
@@ -129,15 +128,16 @@
 				}
 			}
 		}
-		
+
 		return result;
 	},
 	checkElementByType: function(type, elementName, elementData) {
 		var result = 1;
-		
+
 		if (type) {
 			if (type == 'required') {
-				if (!document[TBE_EDITOR.formname][elementName].value) {
+				var value = document[TBE_EDITOR.formname][elementName].value;
+				if (!value || value == '0' && elementData.isDateTime) {
 					result = 0;
 					TBE_EDITOR.setImage('req_'+elementData.requiredImg, TBE_EDITOR.images.req);
 				}
@@ -156,13 +156,13 @@
 				}
 			}
 		}
-		
+
 		return result;
 	},
 	addActionChecks: function(type, checks) {
 		TBE_EDITOR.actionChecks[type].push(checks);
 	},
-	
+
 	// Regular TCEforms JSbottom scripts:
 	loginRefreshed: function() {
 		var date = new Date();
@@ -224,7 +224,7 @@
 				TBE_EDITOR.setImage(imgReqObjName,TBE_EDITOR.images.req);
 			}
 		}
-		
+
 		if (TBE_EDITOR.isPalettedoc) { TBE_EDITOR.setOriginalFormFieldValue(theField) };
 	},
 	setOriginalFormFieldValue: function(theField) {
@@ -274,7 +274,7 @@
 		if (!TBE_EDITOR.checkElements('required', false)) { OK = 0; }
 		// $reqRangeCheck
 		if (!TBE_EDITOR.checkElements('range', false)) { OK = 0; }
-				
+
 		if (OK || sendAlert==-1) {
 			return true;
 		} else {
