How to implement Time Range Picker in Magento 2 Admin system.xml? The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Date field system.xmlMagento 2 - time picker on backend (xml form)How to overwrite System.xml?Magento 2 Pattern Library — Date & Time SelectorsHTTP 500 Error in System ConfigurationMagento 2 - time picker on backend (xml form)Magento 2 Add Datetime picker in system.xmlDate Time picker and time zone woesHow to implement Single Date and Time Picker in Magento 2Custom Module for Custom Column using Plugin Yes/No optionMagento 2 DateTime picker - Limit time selection rangeMagento2 UI Component admin Grid / Listing stuck loading

Windows 10: How to Lock (not sleep) laptop on lid close?

Is there a way to generate uniformly distributed points on a sphere from a fixed amount of random real numbers per point?

Circular reasoning in L'Hopital's rule

How to politely respond to generic emails requesting a PhD/job in my lab? Without wasting too much time

For what reasons would an animal species NOT cross a *horizontal* land bridge?

ELI5: Why do they say that Israel would have been the fourth country to land a spacecraft on the Moon and why do they call it low cost?

Loose spokes after only a few rides

The following signatures were invalid: EXPKEYSIG 1397BC53640DB551

Is every episode of "Where are my Pants?" identical?

What information about me do stores get via my credit card?

Drawing vertical/oblique lines in Metrical tree (tikz-qtree, tipa)

Word for: a synonym with a positive connotation?

Sort list of array linked objects by keys and values

What do I do when my TA workload is more than expected?

Do working physicists consider Newtonian mechanics to be "falsified"?

Can the DM override racial traits?

Simulating Exploding Dice

Does Parliament hold absolute power in the UK?

What aspect of planet Earth must be changed to prevent the industrial revolution?

Is it ethical to upload a automatically generated paper to a non peer-reviewed site as part of a larger research?

Is this wall load bearing? Blueprints and photos attached

Didn't get enough time to take a Coding Test - what to do now?

Word to describe a time interval

how can a perfect fourth interval be considered either consonant or dissonant?



How to implement Time Range Picker in Magento 2 Admin system.xml?



The 2019 Stack Overflow Developer Survey Results Are In
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Date field system.xmlMagento 2 - time picker on backend (xml form)How to overwrite System.xml?Magento 2 Pattern Library — Date & Time SelectorsHTTP 500 Error in System ConfigurationMagento 2 - time picker on backend (xml form)Magento 2 Add Datetime picker in system.xmlDate Time picker and time zone woesHow to implement Single Date and Time Picker in Magento 2Custom Module for Custom Column using Plugin Yes/No optionMagento 2 DateTime picker - Limit time selection rangeMagento2 UI Component admin Grid / Listing stuck loading



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








1















I found one similar solution that almost does what I want.
DateTimePicker System.xml



I have implemented its code and was able to display a DateTime Picker in my admin configuration. However, I would like to implement a Time Range Picker but I don't need a UI component way of implementing it.










share|improve this question






























    1















    I found one similar solution that almost does what I want.
    DateTimePicker System.xml



    I have implemented its code and was able to display a DateTime Picker in my admin configuration. However, I would like to implement a Time Range Picker but I don't need a UI component way of implementing it.










    share|improve this question


























      1












      1








      1


      1






      I found one similar solution that almost does what I want.
      DateTimePicker System.xml



      I have implemented its code and was able to display a DateTime Picker in my admin configuration. However, I would like to implement a Time Range Picker but I don't need a UI component way of implementing it.










      share|improve this question
















      I found one similar solution that almost does what I want.
      DateTimePicker System.xml



      I have implemented its code and was able to display a DateTime Picker in my admin configuration. However, I would like to implement a Time Range Picker but I don't need a UI component way of implementing it.







      magento2.3 system.xml datepicker timepicker






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 11 mins ago







      magefms

















      asked 2 days ago









      magefmsmagefms

      2,6342528




      2,6342528




















          3 Answers
          3






          active

          oldest

          votes


















          1














          If you wish to add time from/to elements as a slider, you can customize an element frontend model and add your own template.



          How it will be looking



          Here is my example (ported from the regular form to the store configuration section):



          Field in the system.xml:



          <field id="delivery_time" translate="label comment" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
          <label>Delivery Time</label>
          <frontend_model>MageWorxExampleConfigModelConfigFrontendModelDeliveryTime</frontend_model>
          </field>


          Note: real values will be stored with the delivery_time_from and delivery_time_to indexes.



          Frontend model, where I have replaced the default output of the element:



          <?php

          namespace MageWorxExampleConfigModelConfigFrontendModel;


          class DeliveryTime extends MagentoConfigBlockSystemConfigFormField

          /**
          * Retrieve element HTML markup
          *
          * @param MagentoFrameworkDataFormElementAbstractElement $element
          * @return string
          * @throws MagentoFrameworkExceptionLocalizedException
          */
          protected function _getElementHtml(MagentoFrameworkDataFormElementAbstractElement $element)

          $renderer = $this->getLayout()->createBlock(
          'MageWorxExampleConfigBlockTimeSlider'
          );
          $renderer->setElement($element);

          return $renderer->toHtml();




          here we just using a block MageWorxExampleConfigBlockTimeSlider instead of general render.



          And here is the block with template (where slider was defined):



          <?php

          namespace MageWorxExampleConfigBlock;

          use MagentoFrameworkDataFormElementAbstractElement;

          /**
          * Class TimeSlider
          */
          class TimeSlider extends MagentoFrameworkViewElementTemplate implements
          MagentoFrameworkDataFormElementRendererRendererInterface,
          MagentoWidgetBlockBlockInterface


          const TIME_NAME_FROM = 'groups[main][fields][delivery_time_from][value]';
          const TIME_NAME_TO = 'groups[main][fields][delivery_time_to][value]';

          /**
          * Form element which re-rendering
          *
          * @var MagentoFrameworkDataFormElementFieldset
          */
          protected $element;

          /**
          * @var string
          */
          protected $_template = 'MageWorx_ExampleConfig::form/renderer/timeslider.phtml';

          /**
          * @var string
          */
          protected $_htmlId = 'time-range';

          /**
          * Retrieve an element
          *
          * @return MagentoFrameworkDataFormElementFieldset
          */
          public function getElement()

          return $this->element;


          /**
          * Set an element
          *
          * @param AbstractElement $element
          * @return $this
          */
          public function setElement(MagentoFrameworkDataFormElementAbstractElement $element)

          $this->element = $element;

          return $this;


          /**
          * Render element
          *
          * @param AbstractElement $element
          * @return string
          */
          public function render(AbstractElement $element)

          $this->element = $element;

          return $this->toHtml();


          /**
          * @return string
          */
          public function getHtmlId()

          return $this->_htmlId;


          /**
          * @return string
          */
          public function getNameFrom()

          return self::TIME_NAME_FROM;


          /**
          * @return string
          */
          public function getNameTo()

          return self::TIME_NAME_TO;


          /**
          * @param int $minutes
          * @return string
          */
          public function minutesToTime($minutes)

          $hours = floor($minutes / 60);
          $minutes = $minutes % 60;
          $part = $hours >= 12 ? 'PM' : 'AM';

          return sprintf('%02d:%02d %s', $hours, $minutes, $part);


          /**
          * @return string
          * @throws MagentoFrameworkExceptionValidatorException
          */
          protected function _toHtml()

          if (!$this->getTemplate())
          return '';


          return $this->fetchView($this->getTemplateFile());




          Note: you should change values of the constants TIME_NAME_FROM and TIME_NAME_TO to own ones, according your definition in the system.xml.



          Template:



          <?php

          /** @var MageWorxExampleConfigBlockTimeSlider $block */
          $element = $block->getElement();
          $form = $element->getForm();
          /** @var MagentoConfigBlockSystemConfigForm $parentForm */
          $parentForm = $form->getParent();
          $timeFrom = $parentForm->getConfigValue('example_config/main/delivery_time_from');;
          $timeTo = $parentForm->getConfigValue('example_config/main/delivery_time_to');;
          ?>
          <div id="time-range" class="field field-time_range">
          <label class="label" style="white-space: normal;">
          <?php echo __('Time Range: ');?>
          <span class="slider-time">
          <?php echo $block->minutesToTime($timeFrom);?>
          </span>
          <?php echo ' - '; ?>
          <span class="slider-time2">
          <?php echo $block->minutesToTime($timeTo);?>
          </span>
          </label>
          <div class="sliders_step1 control">
          <div id="slider-range"></div>
          <input type="hidden"
          name="<?php echo $block->getNameFrom();?>"
          value="<?php echo $timeFrom?>""
          />
          <input type="hidden"
          name="<?php echo $block->getNameTo();?>"
          value="<?php echo $timeTo?>""
          />
          </div>
          </div>
          <script type="text/javascript">
          require(['jquery', 'jquery/ui'], function($)
          $("#slider-range").slider(
          range: true,
          min: 0,
          max: 1440,
          step: 15,
          values: [<?php echo $timeFrom?>, <?php echo $timeTo?>],
          slide: function (e, ui)
          var hours1 = Math.floor(ui.values[0] / 60);
          var minutes1 = ui.values[0] - (hours1 * 60);

          if (hours1.length == 1) hours1 = '0' + hours1;
          if (minutes1.length == 1) minutes1 = '0' + minutes1;
          if (minutes1 == 0) minutes1 = '00';
          if (hours1 >= 12)
          if (hours1 == 12)
          hours1 = hours1;
          minutes1 = minutes1 + " PM";
          else
          hours1 = hours1 - 12;
          minutes1 = minutes1 + " PM";

          else
          hours1 = hours1;
          minutes1 = minutes1 + " AM";

          if (hours1 == 0)
          hours1 = 12;
          minutes1 = minutes1;



          $('.slider-time').html(hours1 + ':' + minutes1);

          var hours2 = Math.floor(ui.values[1] / 60);
          var minutes2 = ui.values[1] - (hours2 * 60);

          if (hours2.length == 1) hours2 = '0' + hours2;
          if (minutes2.length == 1) minutes2 = '0' + minutes2;
          if (minutes2 == 0) minutes2 = '00';
          if (hours2 >= 12)
          if (hours2 == 12)
          hours2 = hours2;
          minutes2 = minutes2 + " PM";
          else if (hours2 == 24)
          hours2 = 11;
          minutes2 = "59 PM";
          else
          hours2 = hours2 - 12;
          minutes2 = minutes2 + " PM";

          else
          hours2 = hours2;
          minutes2 = minutes2 + " AM";


          $('.slider-time2').html(hours2 + ':' + minutes2);
          $('[name="<?php echo $block->getNameFrom();?>"]').val(ui.values[0]);
          $('[name="<?php echo $block->getNameTo();?>"]').val(ui.values[1]);

          );
          );
          </script>


          That's all. Based on this example you can modify code to add base features like a use global value etc.



          Here is full code on the GitHub.



          PS: Example partially taken from the Shipping Suite Ultimate Extension by MageWorx (where that kind of slider used in the form).



          PPS: in the example time stored in the database in minutes, like 120 => 2:00 AM.






          share|improve this answer






























            2














            I would suggest to use the same way magento uses for saving time.



            In your admin panel, goto




            Stores -> Configuration -> Advanced -> System -> Scheduled Backup Settings




            See the Start Time field.



            enter image description here



            You may use the same thing in your system.xml file. It seems more accurate.



            Let me know if you need a code sample for that. I have used the same in one of my module.





            etc/adminhtml/system.xml





            <field id="opening_time" translate="label" type="time" showInDefault="1" showInWebsite="1" showInStore="1" sortOrder="40">
            <label>Opening Time</label>
            </field>


            Just add above field in system.xml and it will work as per magento standard. It will save time like 15,25,00. The type='time' makes it work. Thats it. No additional coding is needed.






            share|improve this answer

























            • can you include code for this one so that I can check

              – magefms
              2 days ago











            • Edited answer with the code. Please check.

              – Yash Shah
              2 days ago











            • okay, I will update you if it works

              – magefms
              2 days ago


















            1














            You can follow steps below to show Datetime field in your custom module admin config section



            step 1) Create system.xml under ***app/code/Vendor/Module/etc/adminFile:*



            File : app/code/Vendor/MyModule/etc/adminhtml/system.xml



            <?xml version="1.0"?>

            <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
            <system>
            <tab id="mycustom" translate="label" sortOrder="450">
            <label>My Custom Setting</label>
            </tab>
            <section id="mycustom" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
            <class>separator-top</class>
            <label>My Custom Setting</label>
            <tab>mycustom</tab>
            <resource>Magento_Checkout::config</resource>
            <group id="general" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
            <field id="mydate" translate="label" type="date" showInDefault="1" showInWebsite="1" showInStore="1">
            <label>My Date Field</label>
            <frontend_model>VendorMyModuleBlockAdminhtmlSystemConfigDateTime</frontend_model>
            </field>
            </group>
            </section>
            </system>
            </config>


            step 2) Create the block DateTime.php under /app/code/Vendor/MyModule/Block/Adminhtml/System/Config/DateTime.php



            File : /app/code/Vendor/MyModule/Block/Adminhtml/System/Config/DateTime.php



            <?php

            namespace VendorMyModuleBlockAdminhtmlSystemConfig;

            class DateTime extends MagentoConfigBlockSystemConfigFormField


            protected $timezone;

            public function __construct(
            MagentoBackendBlockTemplateContext $context,
            MagentoFrameworkStdlibDateTimeTimezoneInterface $timezone,
            array $data = []
            )
            $this->timezone = $timezone;
            parent::__construct($context, $data);


            public function render(MagentoFrameworkDataFormElementAbstractElement $element)

            $element->setDateFormat($this->timezone->getDateFormat());
            $element->setTimeFormat($this->timezone->getTimeFormat());
            $element->setShowsTime(true);
            return parent::render($element);




            step 3: Run Following commands



            sudo php bin/magento setup:di:compile
            sudo php bin/magento cache:flush


            step 4: Check your custom module admin config section for newly added datetime config field.



            enter image description here






            share|improve this answer























            • Thanks for the answer bro, but I have done that already, please review my requirement, I need time picker only.

              – magefms
              2 days ago











            Your Answer








            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "479"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f269454%2fhow-to-implement-time-range-picker-in-magento-2-admin-system-xml%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            3 Answers
            3






            active

            oldest

            votes








            3 Answers
            3






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            If you wish to add time from/to elements as a slider, you can customize an element frontend model and add your own template.



            How it will be looking



            Here is my example (ported from the regular form to the store configuration section):



            Field in the system.xml:



            <field id="delivery_time" translate="label comment" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
            <label>Delivery Time</label>
            <frontend_model>MageWorxExampleConfigModelConfigFrontendModelDeliveryTime</frontend_model>
            </field>


            Note: real values will be stored with the delivery_time_from and delivery_time_to indexes.



            Frontend model, where I have replaced the default output of the element:



            <?php

            namespace MageWorxExampleConfigModelConfigFrontendModel;


            class DeliveryTime extends MagentoConfigBlockSystemConfigFormField

            /**
            * Retrieve element HTML markup
            *
            * @param MagentoFrameworkDataFormElementAbstractElement $element
            * @return string
            * @throws MagentoFrameworkExceptionLocalizedException
            */
            protected function _getElementHtml(MagentoFrameworkDataFormElementAbstractElement $element)

            $renderer = $this->getLayout()->createBlock(
            'MageWorxExampleConfigBlockTimeSlider'
            );
            $renderer->setElement($element);

            return $renderer->toHtml();




            here we just using a block MageWorxExampleConfigBlockTimeSlider instead of general render.



            And here is the block with template (where slider was defined):



            <?php

            namespace MageWorxExampleConfigBlock;

            use MagentoFrameworkDataFormElementAbstractElement;

            /**
            * Class TimeSlider
            */
            class TimeSlider extends MagentoFrameworkViewElementTemplate implements
            MagentoFrameworkDataFormElementRendererRendererInterface,
            MagentoWidgetBlockBlockInterface


            const TIME_NAME_FROM = 'groups[main][fields][delivery_time_from][value]';
            const TIME_NAME_TO = 'groups[main][fields][delivery_time_to][value]';

            /**
            * Form element which re-rendering
            *
            * @var MagentoFrameworkDataFormElementFieldset
            */
            protected $element;

            /**
            * @var string
            */
            protected $_template = 'MageWorx_ExampleConfig::form/renderer/timeslider.phtml';

            /**
            * @var string
            */
            protected $_htmlId = 'time-range';

            /**
            * Retrieve an element
            *
            * @return MagentoFrameworkDataFormElementFieldset
            */
            public function getElement()

            return $this->element;


            /**
            * Set an element
            *
            * @param AbstractElement $element
            * @return $this
            */
            public function setElement(MagentoFrameworkDataFormElementAbstractElement $element)

            $this->element = $element;

            return $this;


            /**
            * Render element
            *
            * @param AbstractElement $element
            * @return string
            */
            public function render(AbstractElement $element)

            $this->element = $element;

            return $this->toHtml();


            /**
            * @return string
            */
            public function getHtmlId()

            return $this->_htmlId;


            /**
            * @return string
            */
            public function getNameFrom()

            return self::TIME_NAME_FROM;


            /**
            * @return string
            */
            public function getNameTo()

            return self::TIME_NAME_TO;


            /**
            * @param int $minutes
            * @return string
            */
            public function minutesToTime($minutes)

            $hours = floor($minutes / 60);
            $minutes = $minutes % 60;
            $part = $hours >= 12 ? 'PM' : 'AM';

            return sprintf('%02d:%02d %s', $hours, $minutes, $part);


            /**
            * @return string
            * @throws MagentoFrameworkExceptionValidatorException
            */
            protected function _toHtml()

            if (!$this->getTemplate())
            return '';


            return $this->fetchView($this->getTemplateFile());




            Note: you should change values of the constants TIME_NAME_FROM and TIME_NAME_TO to own ones, according your definition in the system.xml.



            Template:



            <?php

            /** @var MageWorxExampleConfigBlockTimeSlider $block */
            $element = $block->getElement();
            $form = $element->getForm();
            /** @var MagentoConfigBlockSystemConfigForm $parentForm */
            $parentForm = $form->getParent();
            $timeFrom = $parentForm->getConfigValue('example_config/main/delivery_time_from');;
            $timeTo = $parentForm->getConfigValue('example_config/main/delivery_time_to');;
            ?>
            <div id="time-range" class="field field-time_range">
            <label class="label" style="white-space: normal;">
            <?php echo __('Time Range: ');?>
            <span class="slider-time">
            <?php echo $block->minutesToTime($timeFrom);?>
            </span>
            <?php echo ' - '; ?>
            <span class="slider-time2">
            <?php echo $block->minutesToTime($timeTo);?>
            </span>
            </label>
            <div class="sliders_step1 control">
            <div id="slider-range"></div>
            <input type="hidden"
            name="<?php echo $block->getNameFrom();?>"
            value="<?php echo $timeFrom?>""
            />
            <input type="hidden"
            name="<?php echo $block->getNameTo();?>"
            value="<?php echo $timeTo?>""
            />
            </div>
            </div>
            <script type="text/javascript">
            require(['jquery', 'jquery/ui'], function($)
            $("#slider-range").slider(
            range: true,
            min: 0,
            max: 1440,
            step: 15,
            values: [<?php echo $timeFrom?>, <?php echo $timeTo?>],
            slide: function (e, ui)
            var hours1 = Math.floor(ui.values[0] / 60);
            var minutes1 = ui.values[0] - (hours1 * 60);

            if (hours1.length == 1) hours1 = '0' + hours1;
            if (minutes1.length == 1) minutes1 = '0' + minutes1;
            if (minutes1 == 0) minutes1 = '00';
            if (hours1 >= 12)
            if (hours1 == 12)
            hours1 = hours1;
            minutes1 = minutes1 + " PM";
            else
            hours1 = hours1 - 12;
            minutes1 = minutes1 + " PM";

            else
            hours1 = hours1;
            minutes1 = minutes1 + " AM";

            if (hours1 == 0)
            hours1 = 12;
            minutes1 = minutes1;



            $('.slider-time').html(hours1 + ':' + minutes1);

            var hours2 = Math.floor(ui.values[1] / 60);
            var minutes2 = ui.values[1] - (hours2 * 60);

            if (hours2.length == 1) hours2 = '0' + hours2;
            if (minutes2.length == 1) minutes2 = '0' + minutes2;
            if (minutes2 == 0) minutes2 = '00';
            if (hours2 >= 12)
            if (hours2 == 12)
            hours2 = hours2;
            minutes2 = minutes2 + " PM";
            else if (hours2 == 24)
            hours2 = 11;
            minutes2 = "59 PM";
            else
            hours2 = hours2 - 12;
            minutes2 = minutes2 + " PM";

            else
            hours2 = hours2;
            minutes2 = minutes2 + " AM";


            $('.slider-time2').html(hours2 + ':' + minutes2);
            $('[name="<?php echo $block->getNameFrom();?>"]').val(ui.values[0]);
            $('[name="<?php echo $block->getNameTo();?>"]').val(ui.values[1]);

            );
            );
            </script>


            That's all. Based on this example you can modify code to add base features like a use global value etc.



            Here is full code on the GitHub.



            PS: Example partially taken from the Shipping Suite Ultimate Extension by MageWorx (where that kind of slider used in the form).



            PPS: in the example time stored in the database in minutes, like 120 => 2:00 AM.






            share|improve this answer



























              1














              If you wish to add time from/to elements as a slider, you can customize an element frontend model and add your own template.



              How it will be looking



              Here is my example (ported from the regular form to the store configuration section):



              Field in the system.xml:



              <field id="delivery_time" translate="label comment" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
              <label>Delivery Time</label>
              <frontend_model>MageWorxExampleConfigModelConfigFrontendModelDeliveryTime</frontend_model>
              </field>


              Note: real values will be stored with the delivery_time_from and delivery_time_to indexes.



              Frontend model, where I have replaced the default output of the element:



              <?php

              namespace MageWorxExampleConfigModelConfigFrontendModel;


              class DeliveryTime extends MagentoConfigBlockSystemConfigFormField

              /**
              * Retrieve element HTML markup
              *
              * @param MagentoFrameworkDataFormElementAbstractElement $element
              * @return string
              * @throws MagentoFrameworkExceptionLocalizedException
              */
              protected function _getElementHtml(MagentoFrameworkDataFormElementAbstractElement $element)

              $renderer = $this->getLayout()->createBlock(
              'MageWorxExampleConfigBlockTimeSlider'
              );
              $renderer->setElement($element);

              return $renderer->toHtml();




              here we just using a block MageWorxExampleConfigBlockTimeSlider instead of general render.



              And here is the block with template (where slider was defined):



              <?php

              namespace MageWorxExampleConfigBlock;

              use MagentoFrameworkDataFormElementAbstractElement;

              /**
              * Class TimeSlider
              */
              class TimeSlider extends MagentoFrameworkViewElementTemplate implements
              MagentoFrameworkDataFormElementRendererRendererInterface,
              MagentoWidgetBlockBlockInterface


              const TIME_NAME_FROM = 'groups[main][fields][delivery_time_from][value]';
              const TIME_NAME_TO = 'groups[main][fields][delivery_time_to][value]';

              /**
              * Form element which re-rendering
              *
              * @var MagentoFrameworkDataFormElementFieldset
              */
              protected $element;

              /**
              * @var string
              */
              protected $_template = 'MageWorx_ExampleConfig::form/renderer/timeslider.phtml';

              /**
              * @var string
              */
              protected $_htmlId = 'time-range';

              /**
              * Retrieve an element
              *
              * @return MagentoFrameworkDataFormElementFieldset
              */
              public function getElement()

              return $this->element;


              /**
              * Set an element
              *
              * @param AbstractElement $element
              * @return $this
              */
              public function setElement(MagentoFrameworkDataFormElementAbstractElement $element)

              $this->element = $element;

              return $this;


              /**
              * Render element
              *
              * @param AbstractElement $element
              * @return string
              */
              public function render(AbstractElement $element)

              $this->element = $element;

              return $this->toHtml();


              /**
              * @return string
              */
              public function getHtmlId()

              return $this->_htmlId;


              /**
              * @return string
              */
              public function getNameFrom()

              return self::TIME_NAME_FROM;


              /**
              * @return string
              */
              public function getNameTo()

              return self::TIME_NAME_TO;


              /**
              * @param int $minutes
              * @return string
              */
              public function minutesToTime($minutes)

              $hours = floor($minutes / 60);
              $minutes = $minutes % 60;
              $part = $hours >= 12 ? 'PM' : 'AM';

              return sprintf('%02d:%02d %s', $hours, $minutes, $part);


              /**
              * @return string
              * @throws MagentoFrameworkExceptionValidatorException
              */
              protected function _toHtml()

              if (!$this->getTemplate())
              return '';


              return $this->fetchView($this->getTemplateFile());




              Note: you should change values of the constants TIME_NAME_FROM and TIME_NAME_TO to own ones, according your definition in the system.xml.



              Template:



              <?php

              /** @var MageWorxExampleConfigBlockTimeSlider $block */
              $element = $block->getElement();
              $form = $element->getForm();
              /** @var MagentoConfigBlockSystemConfigForm $parentForm */
              $parentForm = $form->getParent();
              $timeFrom = $parentForm->getConfigValue('example_config/main/delivery_time_from');;
              $timeTo = $parentForm->getConfigValue('example_config/main/delivery_time_to');;
              ?>
              <div id="time-range" class="field field-time_range">
              <label class="label" style="white-space: normal;">
              <?php echo __('Time Range: ');?>
              <span class="slider-time">
              <?php echo $block->minutesToTime($timeFrom);?>
              </span>
              <?php echo ' - '; ?>
              <span class="slider-time2">
              <?php echo $block->minutesToTime($timeTo);?>
              </span>
              </label>
              <div class="sliders_step1 control">
              <div id="slider-range"></div>
              <input type="hidden"
              name="<?php echo $block->getNameFrom();?>"
              value="<?php echo $timeFrom?>""
              />
              <input type="hidden"
              name="<?php echo $block->getNameTo();?>"
              value="<?php echo $timeTo?>""
              />
              </div>
              </div>
              <script type="text/javascript">
              require(['jquery', 'jquery/ui'], function($)
              $("#slider-range").slider(
              range: true,
              min: 0,
              max: 1440,
              step: 15,
              values: [<?php echo $timeFrom?>, <?php echo $timeTo?>],
              slide: function (e, ui)
              var hours1 = Math.floor(ui.values[0] / 60);
              var minutes1 = ui.values[0] - (hours1 * 60);

              if (hours1.length == 1) hours1 = '0' + hours1;
              if (minutes1.length == 1) minutes1 = '0' + minutes1;
              if (minutes1 == 0) minutes1 = '00';
              if (hours1 >= 12)
              if (hours1 == 12)
              hours1 = hours1;
              minutes1 = minutes1 + " PM";
              else
              hours1 = hours1 - 12;
              minutes1 = minutes1 + " PM";

              else
              hours1 = hours1;
              minutes1 = minutes1 + " AM";

              if (hours1 == 0)
              hours1 = 12;
              minutes1 = minutes1;



              $('.slider-time').html(hours1 + ':' + minutes1);

              var hours2 = Math.floor(ui.values[1] / 60);
              var minutes2 = ui.values[1] - (hours2 * 60);

              if (hours2.length == 1) hours2 = '0' + hours2;
              if (minutes2.length == 1) minutes2 = '0' + minutes2;
              if (minutes2 == 0) minutes2 = '00';
              if (hours2 >= 12)
              if (hours2 == 12)
              hours2 = hours2;
              minutes2 = minutes2 + " PM";
              else if (hours2 == 24)
              hours2 = 11;
              minutes2 = "59 PM";
              else
              hours2 = hours2 - 12;
              minutes2 = minutes2 + " PM";

              else
              hours2 = hours2;
              minutes2 = minutes2 + " AM";


              $('.slider-time2').html(hours2 + ':' + minutes2);
              $('[name="<?php echo $block->getNameFrom();?>"]').val(ui.values[0]);
              $('[name="<?php echo $block->getNameTo();?>"]').val(ui.values[1]);

              );
              );
              </script>


              That's all. Based on this example you can modify code to add base features like a use global value etc.



              Here is full code on the GitHub.



              PS: Example partially taken from the Shipping Suite Ultimate Extension by MageWorx (where that kind of slider used in the form).



              PPS: in the example time stored in the database in minutes, like 120 => 2:00 AM.






              share|improve this answer

























                1












                1








                1







                If you wish to add time from/to elements as a slider, you can customize an element frontend model and add your own template.



                How it will be looking



                Here is my example (ported from the regular form to the store configuration section):



                Field in the system.xml:



                <field id="delivery_time" translate="label comment" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
                <label>Delivery Time</label>
                <frontend_model>MageWorxExampleConfigModelConfigFrontendModelDeliveryTime</frontend_model>
                </field>


                Note: real values will be stored with the delivery_time_from and delivery_time_to indexes.



                Frontend model, where I have replaced the default output of the element:



                <?php

                namespace MageWorxExampleConfigModelConfigFrontendModel;


                class DeliveryTime extends MagentoConfigBlockSystemConfigFormField

                /**
                * Retrieve element HTML markup
                *
                * @param MagentoFrameworkDataFormElementAbstractElement $element
                * @return string
                * @throws MagentoFrameworkExceptionLocalizedException
                */
                protected function _getElementHtml(MagentoFrameworkDataFormElementAbstractElement $element)

                $renderer = $this->getLayout()->createBlock(
                'MageWorxExampleConfigBlockTimeSlider'
                );
                $renderer->setElement($element);

                return $renderer->toHtml();




                here we just using a block MageWorxExampleConfigBlockTimeSlider instead of general render.



                And here is the block with template (where slider was defined):



                <?php

                namespace MageWorxExampleConfigBlock;

                use MagentoFrameworkDataFormElementAbstractElement;

                /**
                * Class TimeSlider
                */
                class TimeSlider extends MagentoFrameworkViewElementTemplate implements
                MagentoFrameworkDataFormElementRendererRendererInterface,
                MagentoWidgetBlockBlockInterface


                const TIME_NAME_FROM = 'groups[main][fields][delivery_time_from][value]';
                const TIME_NAME_TO = 'groups[main][fields][delivery_time_to][value]';

                /**
                * Form element which re-rendering
                *
                * @var MagentoFrameworkDataFormElementFieldset
                */
                protected $element;

                /**
                * @var string
                */
                protected $_template = 'MageWorx_ExampleConfig::form/renderer/timeslider.phtml';

                /**
                * @var string
                */
                protected $_htmlId = 'time-range';

                /**
                * Retrieve an element
                *
                * @return MagentoFrameworkDataFormElementFieldset
                */
                public function getElement()

                return $this->element;


                /**
                * Set an element
                *
                * @param AbstractElement $element
                * @return $this
                */
                public function setElement(MagentoFrameworkDataFormElementAbstractElement $element)

                $this->element = $element;

                return $this;


                /**
                * Render element
                *
                * @param AbstractElement $element
                * @return string
                */
                public function render(AbstractElement $element)

                $this->element = $element;

                return $this->toHtml();


                /**
                * @return string
                */
                public function getHtmlId()

                return $this->_htmlId;


                /**
                * @return string
                */
                public function getNameFrom()

                return self::TIME_NAME_FROM;


                /**
                * @return string
                */
                public function getNameTo()

                return self::TIME_NAME_TO;


                /**
                * @param int $minutes
                * @return string
                */
                public function minutesToTime($minutes)

                $hours = floor($minutes / 60);
                $minutes = $minutes % 60;
                $part = $hours >= 12 ? 'PM' : 'AM';

                return sprintf('%02d:%02d %s', $hours, $minutes, $part);


                /**
                * @return string
                * @throws MagentoFrameworkExceptionValidatorException
                */
                protected function _toHtml()

                if (!$this->getTemplate())
                return '';


                return $this->fetchView($this->getTemplateFile());




                Note: you should change values of the constants TIME_NAME_FROM and TIME_NAME_TO to own ones, according your definition in the system.xml.



                Template:



                <?php

                /** @var MageWorxExampleConfigBlockTimeSlider $block */
                $element = $block->getElement();
                $form = $element->getForm();
                /** @var MagentoConfigBlockSystemConfigForm $parentForm */
                $parentForm = $form->getParent();
                $timeFrom = $parentForm->getConfigValue('example_config/main/delivery_time_from');;
                $timeTo = $parentForm->getConfigValue('example_config/main/delivery_time_to');;
                ?>
                <div id="time-range" class="field field-time_range">
                <label class="label" style="white-space: normal;">
                <?php echo __('Time Range: ');?>
                <span class="slider-time">
                <?php echo $block->minutesToTime($timeFrom);?>
                </span>
                <?php echo ' - '; ?>
                <span class="slider-time2">
                <?php echo $block->minutesToTime($timeTo);?>
                </span>
                </label>
                <div class="sliders_step1 control">
                <div id="slider-range"></div>
                <input type="hidden"
                name="<?php echo $block->getNameFrom();?>"
                value="<?php echo $timeFrom?>""
                />
                <input type="hidden"
                name="<?php echo $block->getNameTo();?>"
                value="<?php echo $timeTo?>""
                />
                </div>
                </div>
                <script type="text/javascript">
                require(['jquery', 'jquery/ui'], function($)
                $("#slider-range").slider(
                range: true,
                min: 0,
                max: 1440,
                step: 15,
                values: [<?php echo $timeFrom?>, <?php echo $timeTo?>],
                slide: function (e, ui)
                var hours1 = Math.floor(ui.values[0] / 60);
                var minutes1 = ui.values[0] - (hours1 * 60);

                if (hours1.length == 1) hours1 = '0' + hours1;
                if (minutes1.length == 1) minutes1 = '0' + minutes1;
                if (minutes1 == 0) minutes1 = '00';
                if (hours1 >= 12)
                if (hours1 == 12)
                hours1 = hours1;
                minutes1 = minutes1 + " PM";
                else
                hours1 = hours1 - 12;
                minutes1 = minutes1 + " PM";

                else
                hours1 = hours1;
                minutes1 = minutes1 + " AM";

                if (hours1 == 0)
                hours1 = 12;
                minutes1 = minutes1;



                $('.slider-time').html(hours1 + ':' + minutes1);

                var hours2 = Math.floor(ui.values[1] / 60);
                var minutes2 = ui.values[1] - (hours2 * 60);

                if (hours2.length == 1) hours2 = '0' + hours2;
                if (minutes2.length == 1) minutes2 = '0' + minutes2;
                if (minutes2 == 0) minutes2 = '00';
                if (hours2 >= 12)
                if (hours2 == 12)
                hours2 = hours2;
                minutes2 = minutes2 + " PM";
                else if (hours2 == 24)
                hours2 = 11;
                minutes2 = "59 PM";
                else
                hours2 = hours2 - 12;
                minutes2 = minutes2 + " PM";

                else
                hours2 = hours2;
                minutes2 = minutes2 + " AM";


                $('.slider-time2').html(hours2 + ':' + minutes2);
                $('[name="<?php echo $block->getNameFrom();?>"]').val(ui.values[0]);
                $('[name="<?php echo $block->getNameTo();?>"]').val(ui.values[1]);

                );
                );
                </script>


                That's all. Based on this example you can modify code to add base features like a use global value etc.



                Here is full code on the GitHub.



                PS: Example partially taken from the Shipping Suite Ultimate Extension by MageWorx (where that kind of slider used in the form).



                PPS: in the example time stored in the database in minutes, like 120 => 2:00 AM.






                share|improve this answer













                If you wish to add time from/to elements as a slider, you can customize an element frontend model and add your own template.



                How it will be looking



                Here is my example (ported from the regular form to the store configuration section):



                Field in the system.xml:



                <field id="delivery_time" translate="label comment" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
                <label>Delivery Time</label>
                <frontend_model>MageWorxExampleConfigModelConfigFrontendModelDeliveryTime</frontend_model>
                </field>


                Note: real values will be stored with the delivery_time_from and delivery_time_to indexes.



                Frontend model, where I have replaced the default output of the element:



                <?php

                namespace MageWorxExampleConfigModelConfigFrontendModel;


                class DeliveryTime extends MagentoConfigBlockSystemConfigFormField

                /**
                * Retrieve element HTML markup
                *
                * @param MagentoFrameworkDataFormElementAbstractElement $element
                * @return string
                * @throws MagentoFrameworkExceptionLocalizedException
                */
                protected function _getElementHtml(MagentoFrameworkDataFormElementAbstractElement $element)

                $renderer = $this->getLayout()->createBlock(
                'MageWorxExampleConfigBlockTimeSlider'
                );
                $renderer->setElement($element);

                return $renderer->toHtml();




                here we just using a block MageWorxExampleConfigBlockTimeSlider instead of general render.



                And here is the block with template (where slider was defined):



                <?php

                namespace MageWorxExampleConfigBlock;

                use MagentoFrameworkDataFormElementAbstractElement;

                /**
                * Class TimeSlider
                */
                class TimeSlider extends MagentoFrameworkViewElementTemplate implements
                MagentoFrameworkDataFormElementRendererRendererInterface,
                MagentoWidgetBlockBlockInterface


                const TIME_NAME_FROM = 'groups[main][fields][delivery_time_from][value]';
                const TIME_NAME_TO = 'groups[main][fields][delivery_time_to][value]';

                /**
                * Form element which re-rendering
                *
                * @var MagentoFrameworkDataFormElementFieldset
                */
                protected $element;

                /**
                * @var string
                */
                protected $_template = 'MageWorx_ExampleConfig::form/renderer/timeslider.phtml';

                /**
                * @var string
                */
                protected $_htmlId = 'time-range';

                /**
                * Retrieve an element
                *
                * @return MagentoFrameworkDataFormElementFieldset
                */
                public function getElement()

                return $this->element;


                /**
                * Set an element
                *
                * @param AbstractElement $element
                * @return $this
                */
                public function setElement(MagentoFrameworkDataFormElementAbstractElement $element)

                $this->element = $element;

                return $this;


                /**
                * Render element
                *
                * @param AbstractElement $element
                * @return string
                */
                public function render(AbstractElement $element)

                $this->element = $element;

                return $this->toHtml();


                /**
                * @return string
                */
                public function getHtmlId()

                return $this->_htmlId;


                /**
                * @return string
                */
                public function getNameFrom()

                return self::TIME_NAME_FROM;


                /**
                * @return string
                */
                public function getNameTo()

                return self::TIME_NAME_TO;


                /**
                * @param int $minutes
                * @return string
                */
                public function minutesToTime($minutes)

                $hours = floor($minutes / 60);
                $minutes = $minutes % 60;
                $part = $hours >= 12 ? 'PM' : 'AM';

                return sprintf('%02d:%02d %s', $hours, $minutes, $part);


                /**
                * @return string
                * @throws MagentoFrameworkExceptionValidatorException
                */
                protected function _toHtml()

                if (!$this->getTemplate())
                return '';


                return $this->fetchView($this->getTemplateFile());




                Note: you should change values of the constants TIME_NAME_FROM and TIME_NAME_TO to own ones, according your definition in the system.xml.



                Template:



                <?php

                /** @var MageWorxExampleConfigBlockTimeSlider $block */
                $element = $block->getElement();
                $form = $element->getForm();
                /** @var MagentoConfigBlockSystemConfigForm $parentForm */
                $parentForm = $form->getParent();
                $timeFrom = $parentForm->getConfigValue('example_config/main/delivery_time_from');;
                $timeTo = $parentForm->getConfigValue('example_config/main/delivery_time_to');;
                ?>
                <div id="time-range" class="field field-time_range">
                <label class="label" style="white-space: normal;">
                <?php echo __('Time Range: ');?>
                <span class="slider-time">
                <?php echo $block->minutesToTime($timeFrom);?>
                </span>
                <?php echo ' - '; ?>
                <span class="slider-time2">
                <?php echo $block->minutesToTime($timeTo);?>
                </span>
                </label>
                <div class="sliders_step1 control">
                <div id="slider-range"></div>
                <input type="hidden"
                name="<?php echo $block->getNameFrom();?>"
                value="<?php echo $timeFrom?>""
                />
                <input type="hidden"
                name="<?php echo $block->getNameTo();?>"
                value="<?php echo $timeTo?>""
                />
                </div>
                </div>
                <script type="text/javascript">
                require(['jquery', 'jquery/ui'], function($)
                $("#slider-range").slider(
                range: true,
                min: 0,
                max: 1440,
                step: 15,
                values: [<?php echo $timeFrom?>, <?php echo $timeTo?>],
                slide: function (e, ui)
                var hours1 = Math.floor(ui.values[0] / 60);
                var minutes1 = ui.values[0] - (hours1 * 60);

                if (hours1.length == 1) hours1 = '0' + hours1;
                if (minutes1.length == 1) minutes1 = '0' + minutes1;
                if (minutes1 == 0) minutes1 = '00';
                if (hours1 >= 12)
                if (hours1 == 12)
                hours1 = hours1;
                minutes1 = minutes1 + " PM";
                else
                hours1 = hours1 - 12;
                minutes1 = minutes1 + " PM";

                else
                hours1 = hours1;
                minutes1 = minutes1 + " AM";

                if (hours1 == 0)
                hours1 = 12;
                minutes1 = minutes1;



                $('.slider-time').html(hours1 + ':' + minutes1);

                var hours2 = Math.floor(ui.values[1] / 60);
                var minutes2 = ui.values[1] - (hours2 * 60);

                if (hours2.length == 1) hours2 = '0' + hours2;
                if (minutes2.length == 1) minutes2 = '0' + minutes2;
                if (minutes2 == 0) minutes2 = '00';
                if (hours2 >= 12)
                if (hours2 == 12)
                hours2 = hours2;
                minutes2 = minutes2 + " PM";
                else if (hours2 == 24)
                hours2 = 11;
                minutes2 = "59 PM";
                else
                hours2 = hours2 - 12;
                minutes2 = minutes2 + " PM";

                else
                hours2 = hours2;
                minutes2 = minutes2 + " AM";


                $('.slider-time2').html(hours2 + ':' + minutes2);
                $('[name="<?php echo $block->getNameFrom();?>"]').val(ui.values[0]);
                $('[name="<?php echo $block->getNameTo();?>"]').val(ui.values[1]);

                );
                );
                </script>


                That's all. Based on this example you can modify code to add base features like a use global value etc.



                Here is full code on the GitHub.



                PS: Example partially taken from the Shipping Suite Ultimate Extension by MageWorx (where that kind of slider used in the form).



                PPS: in the example time stored in the database in minutes, like 120 => 2:00 AM.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 14 hours ago









                Siarhey UchukhlebauSiarhey Uchukhlebau

                10.1k93058




                10.1k93058























                    2














                    I would suggest to use the same way magento uses for saving time.



                    In your admin panel, goto




                    Stores -> Configuration -> Advanced -> System -> Scheduled Backup Settings




                    See the Start Time field.



                    enter image description here



                    You may use the same thing in your system.xml file. It seems more accurate.



                    Let me know if you need a code sample for that. I have used the same in one of my module.





                    etc/adminhtml/system.xml





                    <field id="opening_time" translate="label" type="time" showInDefault="1" showInWebsite="1" showInStore="1" sortOrder="40">
                    <label>Opening Time</label>
                    </field>


                    Just add above field in system.xml and it will work as per magento standard. It will save time like 15,25,00. The type='time' makes it work. Thats it. No additional coding is needed.






                    share|improve this answer

























                    • can you include code for this one so that I can check

                      – magefms
                      2 days ago











                    • Edited answer with the code. Please check.

                      – Yash Shah
                      2 days ago











                    • okay, I will update you if it works

                      – magefms
                      2 days ago















                    2














                    I would suggest to use the same way magento uses for saving time.



                    In your admin panel, goto




                    Stores -> Configuration -> Advanced -> System -> Scheduled Backup Settings




                    See the Start Time field.



                    enter image description here



                    You may use the same thing in your system.xml file. It seems more accurate.



                    Let me know if you need a code sample for that. I have used the same in one of my module.





                    etc/adminhtml/system.xml





                    <field id="opening_time" translate="label" type="time" showInDefault="1" showInWebsite="1" showInStore="1" sortOrder="40">
                    <label>Opening Time</label>
                    </field>


                    Just add above field in system.xml and it will work as per magento standard. It will save time like 15,25,00. The type='time' makes it work. Thats it. No additional coding is needed.






                    share|improve this answer

























                    • can you include code for this one so that I can check

                      – magefms
                      2 days ago











                    • Edited answer with the code. Please check.

                      – Yash Shah
                      2 days ago











                    • okay, I will update you if it works

                      – magefms
                      2 days ago













                    2












                    2








                    2







                    I would suggest to use the same way magento uses for saving time.



                    In your admin panel, goto




                    Stores -> Configuration -> Advanced -> System -> Scheduled Backup Settings




                    See the Start Time field.



                    enter image description here



                    You may use the same thing in your system.xml file. It seems more accurate.



                    Let me know if you need a code sample for that. I have used the same in one of my module.





                    etc/adminhtml/system.xml





                    <field id="opening_time" translate="label" type="time" showInDefault="1" showInWebsite="1" showInStore="1" sortOrder="40">
                    <label>Opening Time</label>
                    </field>


                    Just add above field in system.xml and it will work as per magento standard. It will save time like 15,25,00. The type='time' makes it work. Thats it. No additional coding is needed.






                    share|improve this answer















                    I would suggest to use the same way magento uses for saving time.



                    In your admin panel, goto




                    Stores -> Configuration -> Advanced -> System -> Scheduled Backup Settings




                    See the Start Time field.



                    enter image description here



                    You may use the same thing in your system.xml file. It seems more accurate.



                    Let me know if you need a code sample for that. I have used the same in one of my module.





                    etc/adminhtml/system.xml





                    <field id="opening_time" translate="label" type="time" showInDefault="1" showInWebsite="1" showInStore="1" sortOrder="40">
                    <label>Opening Time</label>
                    </field>


                    Just add above field in system.xml and it will work as per magento standard. It will save time like 15,25,00. The type='time' makes it work. Thats it. No additional coding is needed.







                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited 2 days ago

























                    answered 2 days ago









                    Yash ShahYash Shah

                    78118




                    78118












                    • can you include code for this one so that I can check

                      – magefms
                      2 days ago











                    • Edited answer with the code. Please check.

                      – Yash Shah
                      2 days ago











                    • okay, I will update you if it works

                      – magefms
                      2 days ago

















                    • can you include code for this one so that I can check

                      – magefms
                      2 days ago











                    • Edited answer with the code. Please check.

                      – Yash Shah
                      2 days ago











                    • okay, I will update you if it works

                      – magefms
                      2 days ago
















                    can you include code for this one so that I can check

                    – magefms
                    2 days ago





                    can you include code for this one so that I can check

                    – magefms
                    2 days ago













                    Edited answer with the code. Please check.

                    – Yash Shah
                    2 days ago





                    Edited answer with the code. Please check.

                    – Yash Shah
                    2 days ago













                    okay, I will update you if it works

                    – magefms
                    2 days ago





                    okay, I will update you if it works

                    – magefms
                    2 days ago











                    1














                    You can follow steps below to show Datetime field in your custom module admin config section



                    step 1) Create system.xml under ***app/code/Vendor/Module/etc/adminFile:*



                    File : app/code/Vendor/MyModule/etc/adminhtml/system.xml



                    <?xml version="1.0"?>

                    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
                    <system>
                    <tab id="mycustom" translate="label" sortOrder="450">
                    <label>My Custom Setting</label>
                    </tab>
                    <section id="mycustom" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
                    <class>separator-top</class>
                    <label>My Custom Setting</label>
                    <tab>mycustom</tab>
                    <resource>Magento_Checkout::config</resource>
                    <group id="general" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
                    <field id="mydate" translate="label" type="date" showInDefault="1" showInWebsite="1" showInStore="1">
                    <label>My Date Field</label>
                    <frontend_model>VendorMyModuleBlockAdminhtmlSystemConfigDateTime</frontend_model>
                    </field>
                    </group>
                    </section>
                    </system>
                    </config>


                    step 2) Create the block DateTime.php under /app/code/Vendor/MyModule/Block/Adminhtml/System/Config/DateTime.php



                    File : /app/code/Vendor/MyModule/Block/Adminhtml/System/Config/DateTime.php



                    <?php

                    namespace VendorMyModuleBlockAdminhtmlSystemConfig;

                    class DateTime extends MagentoConfigBlockSystemConfigFormField


                    protected $timezone;

                    public function __construct(
                    MagentoBackendBlockTemplateContext $context,
                    MagentoFrameworkStdlibDateTimeTimezoneInterface $timezone,
                    array $data = []
                    )
                    $this->timezone = $timezone;
                    parent::__construct($context, $data);


                    public function render(MagentoFrameworkDataFormElementAbstractElement $element)

                    $element->setDateFormat($this->timezone->getDateFormat());
                    $element->setTimeFormat($this->timezone->getTimeFormat());
                    $element->setShowsTime(true);
                    return parent::render($element);




                    step 3: Run Following commands



                    sudo php bin/magento setup:di:compile
                    sudo php bin/magento cache:flush


                    step 4: Check your custom module admin config section for newly added datetime config field.



                    enter image description here






                    share|improve this answer























                    • Thanks for the answer bro, but I have done that already, please review my requirement, I need time picker only.

                      – magefms
                      2 days ago















                    1














                    You can follow steps below to show Datetime field in your custom module admin config section



                    step 1) Create system.xml under ***app/code/Vendor/Module/etc/adminFile:*



                    File : app/code/Vendor/MyModule/etc/adminhtml/system.xml



                    <?xml version="1.0"?>

                    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
                    <system>
                    <tab id="mycustom" translate="label" sortOrder="450">
                    <label>My Custom Setting</label>
                    </tab>
                    <section id="mycustom" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
                    <class>separator-top</class>
                    <label>My Custom Setting</label>
                    <tab>mycustom</tab>
                    <resource>Magento_Checkout::config</resource>
                    <group id="general" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
                    <field id="mydate" translate="label" type="date" showInDefault="1" showInWebsite="1" showInStore="1">
                    <label>My Date Field</label>
                    <frontend_model>VendorMyModuleBlockAdminhtmlSystemConfigDateTime</frontend_model>
                    </field>
                    </group>
                    </section>
                    </system>
                    </config>


                    step 2) Create the block DateTime.php under /app/code/Vendor/MyModule/Block/Adminhtml/System/Config/DateTime.php



                    File : /app/code/Vendor/MyModule/Block/Adminhtml/System/Config/DateTime.php



                    <?php

                    namespace VendorMyModuleBlockAdminhtmlSystemConfig;

                    class DateTime extends MagentoConfigBlockSystemConfigFormField


                    protected $timezone;

                    public function __construct(
                    MagentoBackendBlockTemplateContext $context,
                    MagentoFrameworkStdlibDateTimeTimezoneInterface $timezone,
                    array $data = []
                    )
                    $this->timezone = $timezone;
                    parent::__construct($context, $data);


                    public function render(MagentoFrameworkDataFormElementAbstractElement $element)

                    $element->setDateFormat($this->timezone->getDateFormat());
                    $element->setTimeFormat($this->timezone->getTimeFormat());
                    $element->setShowsTime(true);
                    return parent::render($element);




                    step 3: Run Following commands



                    sudo php bin/magento setup:di:compile
                    sudo php bin/magento cache:flush


                    step 4: Check your custom module admin config section for newly added datetime config field.



                    enter image description here






                    share|improve this answer























                    • Thanks for the answer bro, but I have done that already, please review my requirement, I need time picker only.

                      – magefms
                      2 days ago













                    1












                    1








                    1







                    You can follow steps below to show Datetime field in your custom module admin config section



                    step 1) Create system.xml under ***app/code/Vendor/Module/etc/adminFile:*



                    File : app/code/Vendor/MyModule/etc/adminhtml/system.xml



                    <?xml version="1.0"?>

                    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
                    <system>
                    <tab id="mycustom" translate="label" sortOrder="450">
                    <label>My Custom Setting</label>
                    </tab>
                    <section id="mycustom" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
                    <class>separator-top</class>
                    <label>My Custom Setting</label>
                    <tab>mycustom</tab>
                    <resource>Magento_Checkout::config</resource>
                    <group id="general" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
                    <field id="mydate" translate="label" type="date" showInDefault="1" showInWebsite="1" showInStore="1">
                    <label>My Date Field</label>
                    <frontend_model>VendorMyModuleBlockAdminhtmlSystemConfigDateTime</frontend_model>
                    </field>
                    </group>
                    </section>
                    </system>
                    </config>


                    step 2) Create the block DateTime.php under /app/code/Vendor/MyModule/Block/Adminhtml/System/Config/DateTime.php



                    File : /app/code/Vendor/MyModule/Block/Adminhtml/System/Config/DateTime.php



                    <?php

                    namespace VendorMyModuleBlockAdminhtmlSystemConfig;

                    class DateTime extends MagentoConfigBlockSystemConfigFormField


                    protected $timezone;

                    public function __construct(
                    MagentoBackendBlockTemplateContext $context,
                    MagentoFrameworkStdlibDateTimeTimezoneInterface $timezone,
                    array $data = []
                    )
                    $this->timezone = $timezone;
                    parent::__construct($context, $data);


                    public function render(MagentoFrameworkDataFormElementAbstractElement $element)

                    $element->setDateFormat($this->timezone->getDateFormat());
                    $element->setTimeFormat($this->timezone->getTimeFormat());
                    $element->setShowsTime(true);
                    return parent::render($element);




                    step 3: Run Following commands



                    sudo php bin/magento setup:di:compile
                    sudo php bin/magento cache:flush


                    step 4: Check your custom module admin config section for newly added datetime config field.



                    enter image description here






                    share|improve this answer













                    You can follow steps below to show Datetime field in your custom module admin config section



                    step 1) Create system.xml under ***app/code/Vendor/Module/etc/adminFile:*



                    File : app/code/Vendor/MyModule/etc/adminhtml/system.xml



                    <?xml version="1.0"?>

                    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
                    <system>
                    <tab id="mycustom" translate="label" sortOrder="450">
                    <label>My Custom Setting</label>
                    </tab>
                    <section id="mycustom" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
                    <class>separator-top</class>
                    <label>My Custom Setting</label>
                    <tab>mycustom</tab>
                    <resource>Magento_Checkout::config</resource>
                    <group id="general" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
                    <field id="mydate" translate="label" type="date" showInDefault="1" showInWebsite="1" showInStore="1">
                    <label>My Date Field</label>
                    <frontend_model>VendorMyModuleBlockAdminhtmlSystemConfigDateTime</frontend_model>
                    </field>
                    </group>
                    </section>
                    </system>
                    </config>


                    step 2) Create the block DateTime.php under /app/code/Vendor/MyModule/Block/Adminhtml/System/Config/DateTime.php



                    File : /app/code/Vendor/MyModule/Block/Adminhtml/System/Config/DateTime.php



                    <?php

                    namespace VendorMyModuleBlockAdminhtmlSystemConfig;

                    class DateTime extends MagentoConfigBlockSystemConfigFormField


                    protected $timezone;

                    public function __construct(
                    MagentoBackendBlockTemplateContext $context,
                    MagentoFrameworkStdlibDateTimeTimezoneInterface $timezone,
                    array $data = []
                    )
                    $this->timezone = $timezone;
                    parent::__construct($context, $data);


                    public function render(MagentoFrameworkDataFormElementAbstractElement $element)

                    $element->setDateFormat($this->timezone->getDateFormat());
                    $element->setTimeFormat($this->timezone->getTimeFormat());
                    $element->setShowsTime(true);
                    return parent::render($element);




                    step 3: Run Following commands



                    sudo php bin/magento setup:di:compile
                    sudo php bin/magento cache:flush


                    step 4: Check your custom module admin config section for newly added datetime config field.



                    enter image description here







                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered 2 days ago









                    Pritam Info 24Pritam Info 24

                    79217




                    79217












                    • Thanks for the answer bro, but I have done that already, please review my requirement, I need time picker only.

                      – magefms
                      2 days ago

















                    • Thanks for the answer bro, but I have done that already, please review my requirement, I need time picker only.

                      – magefms
                      2 days ago
















                    Thanks for the answer bro, but I have done that already, please review my requirement, I need time picker only.

                    – magefms
                    2 days ago





                    Thanks for the answer bro, but I have done that already, please review my requirement, I need time picker only.

                    – magefms
                    2 days ago

















                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Magento Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f269454%2fhow-to-implement-time-range-picker-in-magento-2-admin-system-xml%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Magento 2 duplicate PHPSESSID cookie when using session_start() in custom php scriptMagento 2: User cant logged in into to account page, no error showing!Magento duplicate on subdomainGrabbing storeview from cookie (after using language selector)How do I run php custom script on magento2Magento 2: Include PHP script in headerSession lock after using Cm_RedisSessionscript php to update stockMagento set cookie popupMagento 2 session id cookie - where to find it?How to import Configurable product from csv with custom attributes using php scriptMagento 2 run custom PHP script

                    Can not update quote_id field of “quote_item” table magento 2Magento 2.1 - We can't remove the item. (Shopping Cart doesnt allow us to remove items before becomes empty)Add value for custom quote item attribute using REST apiREST API endpoint v1/carts/cartId/items always returns error messageCorrect way to save entries to databaseHow to remove all associated quote objects of a customer completelyMagento 2 - Save value from custom input field to quote_itemGet quote_item data using quote id and product id filter in Magento 2How to set additional data to quote_item table from controller in Magento 2?What is the purpose of additional_data column in quote_item table in magento2Set Custom Price to Quote item magento2 from controller

                    How to solve knockout JS error in Magento 2 Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?(Magento2) knockout.js:3012 Uncaught ReferenceError: Unable to process bindingUnable to process binding Knockout.js magento 2Cannot read property `scopeLabel` of undefined on Product Detail PageCan't get Customer Data on frontend in Magento 2Magento2 Order Summary - unable to process bindingKO templates are not loading in Magento 2.1 applicationgetting knockout js error magento 2Product grid not load -— Unable to process binding Knockout.js magento 2Product form not loaded in magento2Uncaught ReferenceError: Unable to process binding “if: function()return (isShowLegend()) ” magento 2