【问题标题】:How to use daterangepicker with only one calendar如何仅使用一个日历使用 daterangepicker
【发布时间】:2018-12-20 17:25:36
【问题描述】:

我无法使用日期范围选择器只显示一个日历。我不太确定从哪里开始,因为当您想更改月份时,简单地隐藏另一个日历似乎不起作用。

我正在尝试使用 daterangepicker 创建一个简化的、适合移动设备的日期范围选择器。我可以这样做的一种方法是删除其中一个日历。这将使我在移动版本上有更多空间,并使我可以在我的网站上保留大部分重要内容。

我正在尝试使用引导程序 3 来实现这一点。我还在后端使用 ASP.NET MVC。

DateRangePicker github repo

【问题讨论】:

  • 如果您遇到代码问题,请出示代码。
  • 我只是复制/粘贴了示例中的代码。我所做的并没有什么独特之处,因此我认为不值得分享。
  • 如果您不分享它,那么您实际上是在要求我们从头开始编写解决方案。这可以被视为一个编码请求,这是题外话。如果您遇到特定问题,则需要询问该特定问题。你说你做某事有困难,这意味着你尝试了一些东西。您需要向我们展示您的尝试。
  • dangrossman 的插件有一个分支,其中包括“仅左日历”模式:github.com/bryan0/bootstrap-daterangepicker。这个提交 (github.com/dangrossman/daterangepicker/commit/…) 包含了让它工作所需的所有信息。使用它的缺点是它基于一个相当旧的插件版本,但它可能会完成这项工作。

标签: jquery twitter-bootstrap twitter-bootstrap-3 daterangepicker


【解决方案1】:

DateRangePicker(使用单个扩展日历选择日期范围)。我将附上一个链接,通过示例引导您完成整个过程。

using System;

namespace CustomWebControls
{
    [Serializable]
    public struct DateRange
    {
        public static readonly DateRange EMPTY = new DateRange();

        readonly DateTime from;
        readonly DateTime to;


        public DateRange(DateTime from, DateTime to)
        {
            this.from = from;
            this.to = to;
        }


        public DateTime From
        {
            get { return from; }
        }

        public DateTime To
        {
            get { return to; }
        }

        public TimeSpan TimeSpan
        {
            get
            {
                return to - from;
            }
        }

        public bool Contains(DateTime time)
        {
            return from <= time && time < to;
        }

        public DateRange Include(DateRange otherRange)
        {
            return Include(otherRange.From).Include(otherRange.To);
        }

        public DateRange Include(DateTime date)
        {
            if (date < from)
                return new DateRange(date, to);
            else if (date > to)
                return new DateRange(from, date);
            else 
                return this;
        }

        /// <summary>
        /// Creates a one day (24 hr) long DateRange starting at DateTime
        /// </summary>
        public static DateRange CreateDay(DateTime dateTime){
            return new DateRange(dateTime, dateTime.AddDays(1));
        }

        #region operators and overrides
        public override int GetHashCode()
        {
            return from.GetHashCode() + 29*to.GetHashCode();
        }

        public override bool Equals(object obj)
        {
            if (ReferenceEquals(this, obj)) return true;
            if (!(obj is DateRange)) return false;
            DateRange dateRange = (DateRange) obj;
            if (!Equals(from, dateRange.from)) return false;
            if (!Equals(to, dateRange.to)) return false;
            return true;
        }


        public static bool operator == (DateRange d1, DateRange d2)
        {
            return d1.Equals(d2);
        }

        public static bool operator !=(DateRange d1, DateRange d2)
        {
            return !d1.Equals(d2);
        }
        #endregion

    }
}

日期范围选择器 这是覆盖日历的类。它有两个属性,一个用于设置所选日期范围的样式,另一个用于存储所选日期范围。

using System.ComponentModel;
using System.Drawing;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomWebControls
{
    /// <summary>
    /// An extended Calendar that can select DateRanges as well as Dates
    /// </summary>
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:DateRangePicker runat="server"></{0}:DateRangePicker>")]
    public class DateRangePicker : Calendar
    {
        static readonly TableItemStyle defaultSelectedDateRangeStyle = new TableItemStyle();


        static DateRangePicker()
        {
            //initialise a default colour for defaultSelectedDateRangeStyle
            defaultSelectedDateRangeStyle.BackColor = Color.LightSteelBlue;
        }

        TableItemStyle selectedDateRangeStyle = defaultSelectedDateRangeStyle;

        protected override void OnDayRender(TableCell cell, CalendarDay day)
        {
            if (SelectedDateRange.Contains(day.Date))
            {
                cell.ApplyStyle(selectedDateRangeStyle);
            }
        }

        protected override void OnSelectionChanged()
        {
            base.OnSelectionChanged();

            bool emptyDateRange = SelectedDateRange == DateRange.EMPTY;
            bool dateRangeAlreadyPicked = SelectedDateRange.TimeSpan.TotalDays > 1;

            if (emptyDateRange || dateRangeAlreadyPicked)
            {
                SelectedDateRange = DateRange.CreateDay(SelectedDate);
                //save this date as the first date in our date range
            }
            else
            {
                SelectedDateRange = 
                  SelectedDateRange.Include(DateRange.CreateDay(SelectedDate));
                //set the end date in our date range
            }
        }

        //DateRange gets stored in the viewstate since
        //it's a property that needs to persist across page requests.
        <Browsable(false)>
        public DateRange SelectedDateRange
        {
            get { return (DateRange) (ViewState["SelectedDateRange"]??DateRange.EMPTY); }
            set { ViewState["SelectedDateRange"] = value; }
        }

        //SelectedDateRangeStyle goes into a private
        //variable since this property is designed.
        [Category("Styles")]
        [Description("The Style that is aplied to cells within the selected Date Range")]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        [NotifyParentProperty(true)]
        [PersistenceMode(PersistenceMode.InnerProperty)]
        public TableItemStyle SelectedDateRangeStyle
        {
            get { return selectedDateRangeStyle; }
            set { selectedDateRangeStyle = value; }
        }
    }
}

enter link description here

【讨论】:

  • 我已经添加到链接的解释中
  • 您链接的文章与 OP 的 daterangepicker 插件无关。该链接指的是自定义 ASP 控件。
猜你喜欢
  • 2012-01-06
  • 2017-11-18
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多