2013-09-26 18 views
5

W moim kodu poniżej, w jaki sposób skonfigurować arrivaldate i depaturedate więc mogę otrzymać należność? Muszę je ustawić, ponieważ dni pozostały w hotelu, więc mogę wymyślić sumę. Jeśli to ma jakiś sens? Używam datetimickerów w Visual Basic.Jak znaleźć liczbę dni między dwiema datami/DateTimePickers

Public Class RentalForm 
    'declare constants 
    Const tax_rate_decimal As Decimal = 12.25D 
    Const king_price_decimal As Decimal = 110.9D 
    Const queen_price_decimal As Decimal = 105.9D 
    Const double_price_decimal As Decimal = 95.9D 

    'declare variables 
    Private roomchargesumdecimal, taxamountsumdecimal, amountduesumdecimal As Decimal 

    Private Sub exitButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles exitButton.Click 
     Close() 
    End Sub 

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBoxnameofguest.TextChanged 

    End Sub 

    Private Sub calculateButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calculateButton.Click 
     'dimension local variables 
     Dim numberofguestsinteger As Integer 
     Dim roomchargedecimal, taxamountdecimal, amountduedecimal, taxratedecimal As Integer 
     Dim arrivaldate, departuredate As Date 

     Try 
      'dates 
      arrivaldate = Now 

      'convert quantity to numeric 
      numberofguestsinteger = Integer.Parse(TextBoxNumberofguests.Text) 

      'calculate values for single person 
      roomchargedecimal = numberofguestsinteger * (arrivaldate + departuredate) 
      taxratedecimal = roomchargedecimal * tax_rate_decimal 

     Catch ex As Exception 

     End Try 

    End Sub 

    Private Sub DateTimePickerarrivaldate_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePickerarrivaldate.ValueChanged 

    End Sub 

    Private Sub Label16averagelengthofstay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label16averagelengthofstay.Click 


    End Sub 

    Private Sub RentalForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    End Sub 
End Class    
+0

Możliwy duplikat [Oblicz różnicę między dwiema datami (liczba dni)?] (Https://stackoverflow.com/questions/1607336/calculate-difference-between-two-dates-number-of-days) –

Odpowiedz

2

DateTimePicker obiekty mają Value property, które dadzą Ci DateTime dla każdego. Możesz uzyskać różnicę między dwoma obiektami DateTime, odejmując je od siebie.

P.S. Nie jedz wszystkich wyjątków w ten sposób. To nic nie szkodzi.

15

DateTime matematyka może być mylące na początku. Ale to naprawdę nie ma znaczenia, czy są one DateTimePicker kontrole lub zmienne bo myDateTimePicker.ValuejestDateTime Type. Tak, można łączyć ze zmiennych i elementów sterujących, takich jak przyjazd jak teraz i odjazdu z próbnika i po prostu użyć odejmowanie:

Dim arrivaldate As DateTime = DateTime.Now 
Dim departuredate As DateTime = Me.DeparturePicker.Value 

Dim DaysStayed as Int32 = departuredate.Subtract(arrivaldate).Days 

Rzeczą do zapamiętania jest to, że wynik jest TimeSpan przedmiot. Jeśli spojrzymy na strukturę, zobaczysz zapewnia czas, który upłynął w jednostkach z Days do Ticks.

Powyższy kod pobiera wartość Days z TimeSpan bez tworzenia zmiennej temp TimeSpan var. Inny sposób:

Dim tsHotelStay = detarturedate.Value - arrivalDate 
wholeDays = tsHotelStay.Days    ' e.g 7 
totalDays = tsHotelStay.TotalDays   . e.g. 7.53 
totalHrs = tsHotelStay.TotalHours   . eg 180.397 

Tym razem kod ma stworzyć TimeSpan zmienną (tsHotelDay). Zauważ, że wszystkie właściwości są dostępne w postaci pełnej i ułamkowej (z wyjątkiem Ticks).

Na koniec, przedstawione 2 metody odejmowania (DateTime.Subtract(dt) i myTs = dtA - dtB) są funkcjonalnie identyczne: oba zwracają obiekt TimeSpan.

1

Być może można użyć

`DateDiff(DateInterval.Day, DateTimePicker1.Value, DateTimePicker2.Value) 

obliczyć liczbę nieaktualne odstępach czasu (dni) betveen dwiema datami.

Powiązane problemy