ASP.NET C # Дата сравнения - PullRequest
       3

ASP.NET C # Дата сравнения

Ответы [ 5 ]

3 голосов
/ 11 октября 2011

Когда вы собираетесь создать новое бронирование, сравните его с существующими бронированиями.

Бронирование не перекрывается, если оно заканчивается до существующего бронирования или начинается после него, поэтому просто прокрутите существующие бронирования и проверьте:

if (!(newBooking.EndDate < existingBooking.StartDate || newBooking.StartDate > existingBooking.EndDate)) {
  // there is a conflicting booking
}
2 голосов
/ 11 октября 2011

Предполагая класс бронирования со свойствами RoomNumber, StartDate и EndDate.

class Booking
{
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public int RoomNumber { get; set; }
}

bool IsRoomAvailableOnDate(int roomNumber, DateTime date)
{
    //change this to match your data source
    List<Booking> bookings = Booking.GetBookings();

    // get all bookings that have a start date and end date within your timeframe
    var bookingsWithinDate = from booking in bookings
                                where booking.RoomNumber == roomNumber
                                && booking.StartDate <= date
                                && booking.EndDate >= date
                                select booking;

    if (bookingsWithinDate.Any())
    {
        //bookings found that match date and room number
        return false;
    }
    else
    {
        //no bookings
        return true;
    }
}
1 голос
/ 12 октября 2011

Я сам наткнулся на что-то полезное, это MSDN: DateTime Subtract

и код выглядит так:

                    System.DateTime date1 = new System.DateTime(1996, 6, 3, 22, 15, 0);
        System.DateTime date2 = new System.DateTime(1996, 12, 6, 13, 2, 0);
        System.DateTime date3 = new System.DateTime(1996, 10, 12, 8, 42, 0);

        // diff1 gets 185 days, 14 hours, and 47 minutes.
        System.TimeSpan diff1 = date2.Subtract(date1);

        // date4 gets 4/9/1996 5:55:00 PM.
        System.DateTime date4 = date3.Subtract(diff1);

        // diff2 gets 55 days 4 hours and 20 minutes.
        System.TimeSpan diff2 = date2 - date3;

        // date5 gets 4/9/1996 5:55:00 PM.
        System.DateTime date5 = date1 - diff2;

Тем не менее, я попробуюэто, но еще раз спасибо за помощь

Редактировать:

Я также натолкнулся на этот код с сайта http://www.dotnetspider.com/forum/84579-How-To-Check-Date-Date-Range.aspx

DateTime sd=Convert.ToDateTime("2/2/2007");
DateTime ed =Convert.ToDateTime("2/2/2009");
if ((sd<=Convert.ToDateTime(nTextBox1.Text)) && (Convert.ToDateTime(nTextBox1.Text<=ed))
{
MessageBox.Show("In Range");
}
else
{
MessageBox.Show("Not In Range");
}

хорошо для проверки диапазона:D

1 голос
/ 11 октября 2011

Как насчет:

private bool ConflictsWithExisting(Booking booking)
{
  return existingBookings.Any(b => b.ConflictsWith(booking));
}

со следующим способом при бронировании:

public bool ConflictsWith(Booking booking)
{
  // You may want to check they are for the same room here.
  return !(booking.EndDate <= this.StartDate || booking.StartDate >= this.EndDate);
}
0 голосов
/ 11 октября 2011

Если бы это был я, у меня была бы транзакционная таблица RoomBooking в базе данных (содержащая по крайней мере столбец RoomId плюс RoomTypeId, BookingStartDate и BookingEndDate).Затем напишите процедуру хранения, которая запрашивала базу данных для выполнения сценария использования «Доступна ли комната соответствующего типа для определенного диапазона дат» - с такой подписью:

GetAvailableRoomsForTypeAndDates (RoomTypeId, BookingStartDate, BookingEndDate)

Возврат от этого затем обрабатывается в вашем коде или с помощью инструмента ORM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...