Чтобы установить фон всего своего тела, просто добавьте следующее в свой css
html {
background-color: black;
}
body {
background-color: white;
}
Checkout https://developer.mozilla.org/en-US/docs/Web/CSS / CSS_Selectors для получения дополнительной информации о CSS-селекторах различного вида и о том, как их использовать.
Селектор типа CSS сопоставляет элементы по имени узла. Другими словами, он выбирает все элементы данного типа в документе.
Синтаксис
blockquote>element { style properties }
Прежде чем Вы начнете оптимизировать его, зададите себе два вопроса.
a) Это работает?
b) Это слишком медленно?
Только если ответ на оба вопроса - "да", Вы готовы начать оптимизировать.
Кроме этого
Вот то, как я сделал бы это
// Normalise start and end
while start.day is weekend or holiday, start.day++, start.time = 0.00am
if start.day is monday,
start.time = max(start.time, 8am)
else
start.time = max(start.time, 8.30am)
while end.day is weekend or holiday, end.day--, end.time = 11.59pm
end.time = min(end.time, 5.30pm)
// Now we've normalised, is there any time left?
if start > end
return 0
// Calculate time in first day
timediff = 5.30pm - start.time
day = start.day + 1
// Add time on all intervening days
while(day < end.day)
// returns 9 or 9.30hrs or 0 as appropriate, could be optimised to grab all records
// from the database in 1 or 2 hits, by counting all intervening mondays, and all
// intervening tue-fris (non-holidays)
timediff += duration(day)
// Add time on last day
timediff += end.time - 08.30am
if end.day is Monday then
timediff += end.time - 08.00am
else
timediff += end.time - 08.30am
return timediff
Вы могли сделать что-то как ИЗБРАННОЕ КОЛИЧЕСТВО (ДЕНЬ) ОТ ПРАЗДНИКА ГДЕ ПРАЗДНИК МЕЖДУ @Start И @End ДЕНЬ GROUP BY
считать количество праздников, падая в понедельник, во вторник, в среду, и т.д. Вероятно, способ заставить SQL считать только понедельники и непонедельники, хотя ни о чем не может думать в данный момент.
Существует также рекурсивное решение. Не обязательно эффективный, но большая забава:
public decimal ElapseddWorkingHours(DateTime start, DateTime finish)
{
if (start.Date == finish.Date)
return (finish - start).TotalHours;
if (IsWorkingDay(start.Date))
return ElapsedWorkingHours(start, new DateTime(start.Year, start.Month, start.Day, 17, 30, 0))
+ ElapsedWorkingHours(start.Date.AddDays(1).AddHours(DateStartTime(start.Date.AddDays(1)), finish);
else
return ElapsedWorkingHours(start.Date.AddDays(1), finish);
}
особенно рассмотрение метода IsWorkingDay поражает DB, чтобы видеть, является ли тот день государственным праздником
Если проблемой является количество запросов, а не объема данных, запросите данные рабочего дня из базы данных для всего дневного диапазона, в котором Вы нуждаетесь вначале вместо того, чтобы запросить в каждом повторении цикла.
Смотрите на Класс TimeSpan. Это даст Вам часы между любыми 2 разами.
Единственный вызов DB может также получить праздники между Вашими двумя разами; что-то вроде:
SELECT COUNT(*) FROM HOLIDAY WHERE HOLIDAY BETWEEN @Start AND @End
Умножьте то количество на 8 и вычтите его со своих общих часов.
- Ian
Править: В ответ на ниже, Если Вы - праздник, не постоянное число часов. можно сохранить a HolidayStart
и a HolidayEnd
Время в Вашем DB и и просто возвращает их от вызова до дб также. Проведите подсчет часа, подобный любому методу, на котором Вы обосновываетесь для основной стандартной программы.
Попробуйте что-то вдоль этих строк:
TimeSpan = TimeSpan Between Date1 And Date2
cntDays = TimeSpan.Days
cntNumberMondays = Iterate Between Date1 And Date2 Counting Mondays
cntdays = cntdays - cntnumbermondays
NumHolidays = DBCall To Get # Holidays BETWEEN Date1 AND Date2
Cntdays = cntdays - numholidays
numberhours = ((decimal)cntdays * NumberHoursInWorkingDay )+((decimal)cntNumberMondays * NumberHoursInMondayWorkDay )
Построение, какой сказанный @OregonGhost, вместо того, чтобы использовать IsWorkingDay () функция в принимает день и возвращает булевскую переменную, имеет HolidayCount () функция, которая принимает диапазон и возвращает целое число, дающее количество Праздников в диапазоне. Прием здесь - то, если Вы имеете дело с частичной датой в течение своего граничного начала и дней конца, Вы, возможно, все еще должны определить, являются ли те даты самостоятельно праздниками. Но даже затем, Вы могли использовать новый метод, чтобы удостовериться, что Вам были нужны самое большее три вызова к DB.
Используйте запрос @Ian для проверки между датами для обнаружения, какие дни не являются рабочими днями. Затем сделайте некоторую математику, чтобы узнать, падают ли Ваше время начала или время окончания в нерабочий день, и вычтите различие.
Таким образом, если запуск является полуднем субботы, и конец является полуднем понедельника, запрос должен дать Вам назад 2 дня, с которых Вы вычисляете 48 часов (2 x 24). Если бы Ваш запрос на IsWorkingDay (запускается), возвращает false, вычтите от 24 время от запуска до полуночи, которая дала бы Вам 12 часов или общее количество 36 часов нерабочие часы.
Теперь, если Ваш рабочий день является тем же в течение каждого дня, Вы делаете подобную вещь. Если Ваш рабочий день будет немного рассеян, то Вы испытаете больше затруднений.
Идеально, сделайте единый запрос на базе данных, которая дает Вам весь рабочий день между этими двумя разами (или даже даты). Затем сделайте математику локально от того набора.
Самый эффективный способ сделать это должно вычислить различие общего времени, затем вычесть время, которое является выходными или праздником. Существует довольно много пограничных случаев для рассмотрения, но можно упростить это путем взятия первых и последних дней диапазона и вычисления их отдельно.
КОЛИЧЕСТВО (*) метод, предложенный Ian Jacobs, походит на хороший способ считать праздники. Независимо от того, что Вы используете, это просто обработает целые дни, необходимо покрыть запуск и даты окончания отдельно.
Подсчет дней выходных дней легок; если у Вас есть функциональный Рабочий день (дата), которая возвращается 0 в течение понедельника до 6 в течение воскресенья, она похожа на это:
saturdays = ((finish - start) + Weekday(start) + 2) / 7;
sundays = ((finish - start) + Weekday(start) + 1) / 7;
Примечание: (конец - запускается), не должен быть взят буквально, заменить его чем-то, что вычисляет отрезок времени в течение многих дней.