2017-05-25 9 views
-1

reservationstartカラム、reservationendカラム、numofdaysカラムを含む予約ページと予約テーブルを持っています。2つの日付間の日数はどのように計算できますか?

クライアントが選択する2つの日付間の日数を決定しましたが、更新時にテーブルに何も格納されませんでした。

numofdaysのデータタイプはdatatimeでしたが、これをintに変更しました。

Iは、開始日と終了日を宣言するために、この最初の使用:

DayPilotScheduler1.Scale = TimeScale.Manual 
Dim start As New Date(Date.Today.Year, 1, 1, 12, 0, 0) 
Dim [end] As Date = start.AddYears(1) 

これは、更新するためのコードである:データベーステーブル構造の

Protected Sub DayPilotScheduler1_EventMove(ByVal sender As Object, ByVal e As DayPilot.Web.Ui.Events.EventMoveEventArgs) 
    Dim id_Renamed As String = e.Value 
    Dim start As Date = e.NewStart 
    Dim [end] As Date = e.NewEnd 
    Dim resource As String = e.NewResource 

    Dim message As String = Nothing 

    If Not dbIsFree(id_Renamed, start, [end], resource) Then 
     message = "The reservation cannot overlap with an existing reservation." 
    ElseIf e.OldEnd <= Date.Today Then 
     message = "This reservation cannot be changed anymore." 
    ElseIf e.OldStart < Date.Today Then 
     If e.OldResource <> e.NewResource Then 
      message = "The room cannot be changed anymore." 
     Else 
      message = "The reservation start cannot be changed anymore." 
     End If 
    ElseIf e.NewStart < Date.Today Then 
     message = "The reservation cannot be moved to the past." 
    Else 
     dbUpdateEvent(id_Renamed, start, [end], resource) 
     'message = "Reservation moved."; 
    End If 

    LoadResourcesAndEvents() 
    DayPilotScheduler1.UpdateWithMessage(message) 
End Sub 

Private Sub dbUpdateEvent(ByVal id As String, ByVal start As Date, ByVal [end] As Date, ByVal resource As String) 
    Using con As New SqlConnection(ConfigurationManager.ConnectionStrings("connectionStringLocal").ConnectionString) 
     con.Open() 
     Dim numOfDay As Integer = CInt(([end] - start).TotalDays()) 


     Dim cmd As New SqlCommand("UPDATE [Reservation] SET ReservationStart = @start, ReservationEnd = @end, RoomId = @resource,[email protected] WHERE ReservationId = @id", con) 
     cmd.Parameters.AddWithValue("id", id) 
     cmd.Parameters.AddWithValue("start", start) 
     cmd.Parameters.AddWithValue("end", [end]) 
     cmd.Parameters.AddWithValue("resource", resource) 
     cmd.Parameters.Add("numofday", SqlDbType.Int).Value = numOfDay 
     cmd.ExecuteNonQuery() 
    End Using 
End Sub 

スクリーンショット:

enter image description here

答えて

0
Math.floor(Math.abs(new Date(timestringone) - new Date(timestringtwo))/(1000*60*60*24)) 

単に日付を引くと、ミリ秒単位で時間が返されます。最初の時間が2回目の前だった場合は値が負であるため、Math.absを使用して絶対値にしました。次に、1000ミリ秒= 1秒、60秒= 1分、60分= 1時間、24時間= 1日を分け、それを一日中フローティングにします。有効なタイムストリング(timestringoneとtimestringtwo)が2つ必要です。

youveはJSタグを含むので、これは私がVB.Netわからないですが、あなたは簡単にタイプ「のTimeSpan」のオブジェクトを使用してC#で、それを達成することができます...

0

javascriptのソリューションです。たとえば、開始から終了までの日数を知りたいとします。

DateTime start=DateTime.MinValue; 
DateTime end=DateTime.MaxValue; 
TimeSpan span=end-start; 
Console.WriteLine("There're {0} days between {1} and {2}" , span.TotalDays, start.ToString(), end.ToString()); 
0

OPがTimeSpan構造上.Daysプロパティを使用して問題を抱えている:のDateTime型の値とは、私のような何かを書くことが、コンソールウィンドウに表示されます。私はこれが役立つかもしれないと思う:

Dim numOfDay As Integer = CInt(([end] - start).TotalDays()) 

出力は次のとおりです。

あなたのパラメータの使用上に移動
365 

、私はあなたが.Addを使用してデータ型を指定するの恩恵を受けるだろうと思う:

cmd.Parameters.Add("@id", SqlDbType.Int).Value = id 
cmd.Parameters.Add("@start", SqlDbType.Date).Value = start 
cmd.Parameters.Add("@end", SqlDbType.Date).Value = [end] 
cmd.Parameters.Add("@resource", SqlDbType.Int).Value = CInt(resource) 
cmd.Parameters.Add("@numofday", SqlDbType.Int).Value = numOfDay 

SqlDbTypeを変更する必要があることに注意してください。私は前提を取った。

私もSqlConnectionSqlCommandの両方にUsingを実装します。これは私のためだけに良い練習であり、コードはより良く読むことができます。また、すべてのパラメータに.Addのオーバーロードを使用します。

Using con As New SqlConnection(ConfigurationManager.ConnectionStrings("connectionStringLocal").ConnectionString), 
     cmd As New SqlCommand("UPDATE [Reservation] SET ReservationStart = @start, ReservationEnd = @end, RoomId = @resource, numofday = @numofday WHERE ReservationId = @id", con) 

    con.Open() 

    cmd.Parameters.Add("@id", SqlDbType.Int).Value = id 
    cmd.Parameters.Add("@start", SqlDbType.Date).Value = start 
    cmd.Parameters.Add("@end", SqlDbType.Date).Value = [end] 
    cmd.Parameters.Add("@resource", SqlDbType.Int).Value = CInt(resource) 
    cmd.Parameters.Add("@numofday", SqlDbType.Int).Value = CInt(([end] - start).TotalDays()) 

    Dim rowsAffected As Integer = cmd.ExecuteNonQuery() 
    If rowsAffected = 0 Then 
     'nothing updated 
    Else 
     'something updated 
    End If 

End Using 
関連する問題