2017-11-30 2 views
1

Ich möchte ein Formular in einem System erstellen, das es den Mitarbeitern ermöglicht, bei ihrem Vorgesetzten um Genehmigung für Urlaub zu bitten. Das Formular enthält Startdatum, Enddatum, Grund und Name der Supervisor. Dieses System ermöglicht es auch den Mitarbeitern, die Anwendung zu aktualisieren, solange der Status noch in dem Prozess ist, was bedeutet, dass ihr Vorgesetzter noch keine Aktion ausführt, ob sie genehmigen will oder nicht.Wie setze ich das vom SQL-Server abgerufene Datum in den Datapicker in Classic ASP?

Wenn die Mitarbeiter die Anwendung aktualisieren möchten, wird das gleiche Formular angezeigt, und der Grund im Formular für die Aktualisierung wird aus der Datenbank (SQL Server) abgerufen, wie die Mitarbeiter das Formular während der Anwendung ausfüllen. Das Problem ist, dass ich das Start- und Enddatum abrufen kann, aber ich kann das Datum in Datepicker nicht festlegen. Ich möchte das Datum festlegen, das aus der Datenbank als ausgewähltes Datum in Datepicker abgerufen wurde.

Kann mir jemand helfen? Das Bild der Anwendung von wie unten gezeigt.

This is the form for function update

Ich bin mit klassischen ASP und SQL Server auf dieses Web-System zu entwickeln. Dies ist der Code für das Antragsformular:

<input type="date" name="tarikh" id="tarikh" value="<%=KehadiranRS("tarikh")%>" /> 

jedoch die Datumsauswahl des Browsers ist sehr streng über die erlaubt:

<form name="form1" method="POST" action="TMS_lookCatatanNext.asp" onSubmit="return checkdata();"> 
<br> 
<table width="400" border="1" cellpadding="2" cellspacing="2" class="Kuning"> 
    <tr align="center"> 
    <td colspan="2"><strong>PERMOHONAN PENGESAHAN KEHADIRAN 
     <%if isdate(KehadiranRS("tarikh"))then%> 
     <%=day(KehadiranRS("tarikh")) &"/"& month(KehadiranRS("tarikh")) &"/"& year(KehadiranRS("tarikh"))%> 
     <%end if%> 
     </strong></td> 
    </tr> 
    <tr valign="top"> 
    <td width="23%" align="right"> <strong>Pada :</strong></td> 
    <td width="77%" <strong> 
     <input type="date" name="tarikh" id="tarikh"><%=KehadiranRS("tarikh")%> 
     </strong></td> 
    </tr> 
    <tr valign="top"> 
    <td width="23%" align="right"> <strong>Hingga :</strong></td> 
    <td width="77%"> <strong> 
     <input type="date" name="hinggaTarikh" id="hinggaTarikh"><%=KehadiranRS("hinggaTarikh")%> 
     </strong></td> 
    </tr> 
    <tr valign="top"> 
    <td width="23%" align="right"> <strong>Catatan :</strong></td> 
    <td width="77%"> <strong> 
     <textarea name="alasan" cols="30" rows="6" id="alasan"><%if len(KehadiranRS("alasan"))>0 then%><%=server.HTMLEncode(KehadiranRS("alasan"))%><%end if%></textarea> 
     </strong></td> 
    </tr> 

Antwort

1

Sie den Wert aus der Datenbank als der Wert des Datumsauswahl setzen sollten format und erzwingt das Format des Werts YYYY-MM-DD wie in this answer bis How to set default value to the input[type="date"] erwähnt.

Damit die einfache HTML-Auswahlfunktion funktioniert, müssen Sie die Datumszeichenfolge auf der Serverseite bearbeiten und das erwartete Format ausgeben. Dazu können Sie eine benutzerdefinierte Funktion verwenden ich gemacht:

Function ChangeDateFormat(ByVal rawDate, ByVal sourceFormat, ByVal targetFormat) 
    Const adVarChar = 200 'the SQL datatype is varchar 
    Const adInteger = 3 'the SQL datatype is integer 
    Const adOpenStatic = 3 

    Dim indicesRecordset, numberBuffer, x 
    Dim currentChar, newDateFormat 
    Dim sourceDay, sourceMonth, sourceYear 
    Dim sourceDayPadded, sourceMonthPadded 
    Dim formatMapping, formatKey 

    'possible mapping values 
    Set formatMapping = CreateObject("Scripting.Dictionary") 
    formatMapping.Add "DD", 0 
    formatMapping.Add "D", 0 
    formatMapping.Add "MM", 0 
    formatMapping.Add "M", 0 
    formatMapping.Add "YYYY", 0 
    formatMapping.Add "YY", 0 

    'Create a disconnected recordset 
    Set indicesRecordset = CreateObject("ADODB.RECORDSET") 
    indicesRecordset.Fields.append "Index", adInteger 
    indicesRecordset.Fields.append "Format", adVarChar, 1 
    indicesRecordset.Fields.append "Value", adInteger 
    indicesRecordset.CursorType = adOpenStatic 
    indicesRecordset.Open 

    'force string 
    rawDate = CStr(rawDate) 

    'in the source format, d, D, dd, DD etc do not really matter 
    sourceFormat = Replace(Replace(Replace(Replace(UCase(sourceFormat), "DD", "D"), "MM", "M"), "YYYY", "Y"), "YY", "Y") 
    indicesRecordset.AddNew Array("Index", "Format", "Value"), Array(InStr(sourceFormat, "D"), "D", 0) 
    indicesRecordset.AddNew Array("Index", "Format", "Value"), Array(InStr(sourceFormat, "M"), "M", 0) 
    indicesRecordset.AddNew Array("Index", "Format", "Value"), Array(InStr(sourceFormat, "Y"), "Y", 0) 
    indicesRecordset.Update 
    indicesRecordset.Sort = "Index" 
    indicesRecordset.MoveFirst 
    ChangeDateFormat = rawDate 
    If (indicesRecordset.RecordCount = 3) Then 
     'extract numbers from the raw date: 
     numberBuffer = "" 
     For x=1 To Len(rawDate) 
      If indicesRecordset.EOF Then 
       Exit For 
      End If 
      currentChar = Mid(rawDate, x, 1) 
      If IsNumeric(currentChar) Then 
       numberBuffer = numberBuffer & currentChar 
      ElseIf Len(numberBuffer)>0 Then 
       indicesRecordset("Value") = CInt(numberBuffer) 
       indicesRecordset.MoveNext 
       numberBuffer = "" 
      End If 
     Next 
     If Not(indicesRecordset.EOF) And Len(numberBuffer)>0 Then 
      indicesRecordset("Value") = CInt(numberBuffer) 
     End If 
     indicesRecordset.Update 

     'create desired new format 
     targetFormat = UCase(targetFormat) 
     newDateFormat = targetFormat 
     indicesRecordset.Filter = "Format='D'" 
     indicesRecordset.MoveFirst 
     sourceDay = CStr(indicesRecordset("Value")) 
     indicesRecordset.Filter = "Format='M'" 
     indicesRecordset.MoveFirst 
     sourceMonth = CStr(indicesRecordset("Value")) 
     indicesRecordset.Filter = "Format='Y'" 
     indicesRecordset.MoveFirst 
     sourceYear = CStr(indicesRecordset("Value")) 
     sourceDayPadded = sourceDay 
     If Len(sourceDayPadded)<2 Then sourceDayPadded = "0" & sourceDayPadded 
     sourceMonthPadded = sourceMonth 
     If Len(sourceMonthPadded)<2 Then sourceMonthPadded = "0" & sourceMonthPadded 

     formatMapping("DD") = sourceDayPadded 
     formatMapping("D") = sourceDay 
     formatMapping("MM") = sourceMonthPadded 
     formatMapping("M") = sourceMonth 
     formatMapping("YYYY") = sourceYear 
     formatMapping("YY") = Right(sourceYear, 2) 

     For Each formatKey In formatMapping.Keys 
      newDateFormat = Replace(newDateFormat, formatKey, formatMapping(formatKey)) 
     Next 
     ChangeDateFormat = newDateFormat 
    End If 
    Set formatMapping = Nothing 
    indicesRecordset.Close 
End Function 

Ich weiß, es sieht kompliziert aus, aber mit ist es trivial, z.B. in Ihrem Fall:

<input type="date" name="tarikh" id="tarikh" value="<%=ChangeDateFormat(KehadiranRS("tarikh"), "MM/DD/yyyy", "YYYY-MM-DD")%>" /> 
+0

Erstens, danke für Ihre Antwort. Aber das funktioniert nicht für mich, wenn der Eingabetyp = "Text", dann wird der Wert aus der Datenbank in das Feld gesetzt, wenn der Eingabetyp = "Datum", es funktioniert nicht. – NAA

+0

Es bedeutet also, dass es kein gültiges Datum für den Browser ist. Verwenden Sie die jQuery-Datumsauswahl, in der Sie das benutzerdefinierte Datum einfach festlegen können. –

+1

Ich denke schon, weil ich google chrome benutze und das Problem mit jQuery date picker gelöst habe. Danke für deine Antwort. – NAA