Нахождение даты понедельника за неделю с VB.NET

Растущая сложность этого ответа со временем и много требуемых взломов, вероятно, должны предостеречь Вас против выполнения этого вообще. Это полагается на недокументированные внутренние детали реализации администратора, вероятно, повредится снова в будущих версиях Django и не легче реализовать, чем просто нахождение другого календарного виджета JS и использование это.

Однако вот то, что необходимо сделать, если Вы полны решимости сделать эту работу:

  1. Определяют Ваш собственный подкласс ModelForm для Вашей модели (лучше всего для помещения его в forms.py в приложении) и говорят, это для использования AdminDateWidget / AdminTimeWidget / AdminSplitDateTime (замените 'mydate' и т.д. надлежащими именами полей из модели):

    from django import forms
    from my_app.models import Product
    from django.contrib.admin import widgets                                       
    
    class ProductForm(forms.ModelForm):
        class Meta:
            model = Product
        def __init__(self, *args, **kwargs):
            super(ProductForm, self).__init__(*args, **kwargs)
            self.fields['mydate'].widget = widgets.AdminDateWidget()
            self.fields['mytime'].widget = widgets.AdminTimeWidget()
            self.fields['mydatetime'].widget = widgets.AdminSplitDateTime()
    
  2. Изменение Ваш URLconf для передачи 'form_class': ProductForm вместо 'модели': продукт к универсальному представлению create_object (это будет означать "от my_app.forms, импортирует ProductForm" вместо "из продукта импорта my_app.models", конечно).

  3. В главе Вашего шаблона, включайте {{form.media}} для вывода ссылок на файлы JavaScript.

  4. И hacky часть: администраторские виджеты даты/времени предполагают, что материал i18n JS был загружен, и также требует core.js, но не обеспечивает ни один автоматически. Таким образом в Вашем шаблоне выше {{form.media}} Вам будет нужно:

    
    
    

    можно также хотеть использовать следующий администраторский CSS (спасибо Alex для упоминания этого):

    
    
    
    
    

Это подразумевает, что администраторские медиа Django (ADMIN_MEDIA_PREFIX) в/media/admin/-можно изменить это для установки. Идеально Вы использовали бы процессор контекста для передачи, это оценивает шаблону вместо жесткого кодирования его, но это выходит за рамки этого вопроса.

Это также требует, чтобы URL/my_admin/jsi18n/был вручную соединен проводом до представления django.views.i18n.javascript_catalog (или null_javascript_catalog, если Вы не используете I18N). Необходимо сделать это сами вместо того, чтобы пройти приложение администрирования, таким образом, это доступно независимо от того, зарегистрированы ли Вы в администратора (спасибо Jeremy для указания на это). Пример кода для Вашего URLconf:

(r'^my_admin/jsi18n', 'django.views.i18n.javascript_catalog'),

Наконец при использовании Django 1.2 или позже Вам нужен некоторый дополнительный код в Вашем шаблоне, чтобы помочь виджетам найти свои медиа:

{% load adminmedia %} /* At the top of the template. */

/* In the head section of the template. */

Спасибо lupefiasco для этого дополнения.

18
задан Willis 10 November 2009 в 19:20
поделиться

6 ответов

Если воскресенье - первый день недели, вы можете просто сделать это:

Dim today As Date = Date.Today
Dim dayDiff As Integer = today.DayOfWeek - DayOfWeek.Monday
Dim monday As Date = today.AddDays(-dayDiff)

Если понедельник - первый день недели:

Dim today As Date = Date.Today
Dim dayIndex As Integer = today.DayOfWeek
If dayIndex < DayOfWeek.Monday Then
    dayIndex += 7 'Monday is first day of week, no day of week should have a smaller index
End If
Dim dayDiff As Integer = dayIndex - DayOfWeek.Monday
Dim monday As Date = today.AddDays(-dayDiff)
39
ответ дан 30 November 2019 в 06:29
поделиться

DateTime.DayOfWeek - это перечисление, которое указывает, в какой день заданная дата. Поскольку понедельник равен 1, вы можете найти понедельник текущей недели, используя следующий код:

Dim monday As DateTime = Today.AddDays((Today.DayOfWeek - DayOfWeek.Monday) * -1)
6
ответ дан 30 November 2019 в 06:29
поделиться
=Format(DateAdd("d", (-1 * WeekDay(Date.Today()) + 2), Date.Today()), "dd/MM/yyyy")
2
ответ дан 30 November 2019 в 06:29
поделиться

Существует метод дня недели, который вы можете использовать

Dim instance As DateTime
Dim value As DayOfWeek

value = instance.DayOfWeek

см .: http://msdn.microsoft.com/en-us/library/system.datetime.dayofweek .aspx

0
ответ дан 30 November 2019 в 06:29
поделиться

Простой метод должен дать вам то, что вы хотите:

    private static DateTime GetMondayForWeek(DateTime inputDate)
    {
        int daysFromMonday = inputDate.DayOfWeek - DayOfWeek.Monday;
        return inputDate.AddDays(-daysFromMonday);
    }

Вы также можете продлить его на любой день, который хотите:

    private static DateTime GetDayForWeek(DateTime inputDate, DayOfWeek inputDay)
    {
        int daysAway = inputDate.DayOfWeek - inputDay;
        return inputDate.AddDays(-daysAway);
    }

Чтобы вызвать первый пример, просто используйте что-то вроде:

DateTime mondayDate = GetMondayForWeek(new DateTime(2009, 11, 15));
Console.WriteLine(mondayDate);
1
ответ дан 30 November 2019 в 06:29
поделиться

Я только что сделал это в проекте, над которым работаю - обещаю, это правильно. Это метод, который возвращает n-й понедельник после указанной даты. Если заданная дата - понедельник, возвращается следующий понедельник.

Public Function GetSubsequentMonday(ByVal startDate As DateTime, ByVal subsequentWeeks As Integer) As DateTime
    Dim dayOfWeek As Integer = CInt(startDate.DayOfWeek)
    Dim daysUntilMonday As Integer = (Math.Sign(dayOfWeek) * (7 - dayOfWeek)) + 1
    'number of days until the next Monday
    Return startDate.AddDays(CDbl((daysUntilMonday + (7 * (subsequentWeeks - 1)))))
End Function
0
ответ дан 30 November 2019 в 06:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: