How to implement Time Range Picker in Magento 2 Admin system.xml? Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?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

Using et al. for a last / senior author rather than for a first author

Would "destroying" Wurmcoil Engine prevent its tokens from being created?

Crossing US/Canada Border for less than 24 hours

Use second argument for optional first argument if not provided in macro

T-test, ANOVA or Regression, what's the difference?

What does "lightly crushed" mean for cardamon pods?

Why are std::future and std::promise not final?

Can a new player join a group only when a new campaign starts?

How to show element name in portuguese using elements package?

What's the meaning of "fortified infraction restraint"?

Can anything be seen from the center of the Boötes void? How dark would it be?

2001: A Space Odyssey's use of the song "Daisy Bell" (Bicycle Built for Two); life imitates art or vice-versa?

An adverb for when you're not exaggerating

Fundamental Solution of the Pell Equation

Irreducible of finite Krull dimension implies quasi-compact?

Short story by Isaac Asimov about a mental chef

Why are both D and D# fitting into my E minor key?

How to answer "Have you ever been terminated?"

If a contract sometimes uses the wrong name, is it still valid?

How do I find out the mythology and history of my Fortress?

String `!23` is replaced with `docker` in command line

Is the Standard Deduction better than Itemized when both are the same amount?

What is the longest distance a player character can jump in one leap?

Tht Aain’t Right... #2



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



Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
Announcing the arrival of Valued Associate #679: Cesar Manara
Unicorn Meta Zoo #1: Why another podcast?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


      2






      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 Apr 13 at 3:33







      magefms

















      asked Apr 10 at 6:13









      magefmsmagefms

      2,7252528




      2,7252528




















          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























          • tried to install the module from github but it doesn't work

            – magefms
            2 days ago











          • @magefms What exactly does not work? This code just a example, so need to be rewritten as per your needs.

            – Siarhey Uchukhlebau
            yesterday











          • it's okay I fixed it already and now it is working using my own method. I did not use the model because I think it is not necessary. Thank you for your help.

            – magefms
            yesterday


















          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
            Apr 10 at 7:50











          • Edited answer with the code. Please check.

            – Yash Shah
            Apr 10 at 7:54











          • okay, I will update you if it works

            – magefms
            Apr 10 at 7:54


















          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
            Apr 10 at 7:10











          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























          • tried to install the module from github but it doesn't work

            – magefms
            2 days ago











          • @magefms What exactly does not work? This code just a example, so need to be rewritten as per your needs.

            – Siarhey Uchukhlebau
            yesterday











          • it's okay I fixed it already and now it is working using my own method. I did not use the model because I think it is not necessary. Thank you for your help.

            – magefms
            yesterday















          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























          • tried to install the module from github but it doesn't work

            – magefms
            2 days ago











          • @magefms What exactly does not work? This code just a example, so need to be rewritten as per your needs.

            – Siarhey Uchukhlebau
            yesterday











          • it's okay I fixed it already and now it is working using my own method. I did not use the model because I think it is not necessary. Thank you for your help.

            – magefms
            yesterday













          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 Apr 12 at 13:29









          Siarhey UchukhlebauSiarhey Uchukhlebau

          10.1k93058




          10.1k93058












          • tried to install the module from github but it doesn't work

            – magefms
            2 days ago











          • @magefms What exactly does not work? This code just a example, so need to be rewritten as per your needs.

            – Siarhey Uchukhlebau
            yesterday











          • it's okay I fixed it already and now it is working using my own method. I did not use the model because I think it is not necessary. Thank you for your help.

            – magefms
            yesterday

















          • tried to install the module from github but it doesn't work

            – magefms
            2 days ago











          • @magefms What exactly does not work? This code just a example, so need to be rewritten as per your needs.

            – Siarhey Uchukhlebau
            yesterday











          • it's okay I fixed it already and now it is working using my own method. I did not use the model because I think it is not necessary. Thank you for your help.

            – magefms
            yesterday
















          tried to install the module from github but it doesn't work

          – magefms
          2 days ago





          tried to install the module from github but it doesn't work

          – magefms
          2 days ago













          @magefms What exactly does not work? This code just a example, so need to be rewritten as per your needs.

          – Siarhey Uchukhlebau
          yesterday





          @magefms What exactly does not work? This code just a example, so need to be rewritten as per your needs.

          – Siarhey Uchukhlebau
          yesterday













          it's okay I fixed it already and now it is working using my own method. I did not use the model because I think it is not necessary. Thank you for your help.

          – magefms
          yesterday





          it's okay I fixed it already and now it is working using my own method. I did not use the model because I think it is not necessary. Thank you for your help.

          – magefms
          yesterday













          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
            Apr 10 at 7:50











          • Edited answer with the code. Please check.

            – Yash Shah
            Apr 10 at 7:54











          • okay, I will update you if it works

            – magefms
            Apr 10 at 7:54















          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
            Apr 10 at 7:50











          • Edited answer with the code. Please check.

            – Yash Shah
            Apr 10 at 7:54











          • okay, I will update you if it works

            – magefms
            Apr 10 at 7:54













          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 Apr 10 at 8:03

























          answered Apr 10 at 7:49









          Yash ShahYash Shah

          86618




          86618












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

            – magefms
            Apr 10 at 7:50











          • Edited answer with the code. Please check.

            – Yash Shah
            Apr 10 at 7:54











          • okay, I will update you if it works

            – magefms
            Apr 10 at 7:54

















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

            – magefms
            Apr 10 at 7:50











          • Edited answer with the code. Please check.

            – Yash Shah
            Apr 10 at 7:54











          • okay, I will update you if it works

            – magefms
            Apr 10 at 7:54
















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

          – magefms
          Apr 10 at 7:50





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

          – magefms
          Apr 10 at 7:50













          Edited answer with the code. Please check.

          – Yash Shah
          Apr 10 at 7:54





          Edited answer with the code. Please check.

          – Yash Shah
          Apr 10 at 7:54













          okay, I will update you if it works

          – magefms
          Apr 10 at 7:54





          okay, I will update you if it works

          – magefms
          Apr 10 at 7:54











          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
            Apr 10 at 7:10















          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
            Apr 10 at 7:10













          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 Apr 10 at 7:03









          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
            Apr 10 at 7:10

















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

            – magefms
            Apr 10 at 7:10
















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

          – magefms
          Apr 10 at 7:10





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

          – magefms
          Apr 10 at 7:10

















          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

          Romeo and Juliet ContentsCharactersSynopsisSourcesDate and textThemes and motifsCriticism and interpretationLegacyScene by sceneSee alsoNotes and referencesSourcesExternal linksNavigation menu"Consumer Price Index (estimate) 1800–"10.2307/28710160037-3222287101610.1093/res/II.5.31910.2307/45967845967810.2307/2869925286992510.1525/jams.1982.35.3.03a00050"Dada Masilo: South African dancer who breaks the rules"10.1093/res/os-XV.57.1610.2307/28680942868094"Sweet Sorrow: Mann-Korman's Romeo and Juliet Closes Sept. 5 at MN's Ordway"the original10.2307/45957745957710.1017/CCOL0521570476.009"Ram Leela box office collections hit massive Rs 100 crore, pulverises prediction"Archived"Broadway Revival of Romeo and Juliet, Starring Orlando Bloom and Condola Rashad, Will Close Dec. 8"Archived10.1075/jhp.7.1.04hon"Wherefore art thou, Romeo? To make us laugh at Navy Pier"the original10.1093/gmo/9781561592630.article.O006772"Ram-leela Review Roundup: Critics Hail Film as Best Adaptation of Romeo and Juliet"Archived10.2307/31946310047-77293194631"Romeo and Juliet get Twitter treatment""Juliet's Nurse by Lois Leveen""Romeo and Juliet: Orlando Bloom's Broadway Debut Released in Theaters for Valentine's Day"Archived"Romeo and Juliet Has No Balcony"10.1093/gmo/9781561592630.article.O00778110.2307/2867423286742310.1076/enst.82.2.115.959510.1080/00138380601042675"A plague o' both your houses: error in GCSE exam paper forces apology""Juliet of the Five O'Clock Shadow, and Other Wonders"10.2307/33912430027-4321339124310.2307/28487440038-7134284874410.2307/29123140149-661129123144728341M"Weekender Guide: Shakespeare on The Drive""balcony"UK public library membership"romeo"UK public library membership10.1017/CCOL9780521844291"Post-Zionist Critique on Israel and the Palestinians Part III: Popular Culture"10.2307/25379071533-86140377-919X2537907"Capulets and Montagues: UK exam board admit mixing names up in Romeo and Juliet paper"Istoria Novellamente Ritrovata di Due Nobili Amanti2027/mdp.390150822329610820-750X"GCSE exam error: Board accidentally rewrites Shakespeare"10.2307/29176390149-66112917639"Exam board apologises after error in English GCSE paper which confused characters in Shakespeare's Romeo and Juliet""From Mariotto and Ganozza to Romeo and Guilietta: Metamorphoses of a Renaissance Tale"10.2307/37323537323510.2307/2867455286745510.2307/28678912867891"10 Questions for Taylor Swift"10.2307/28680922868092"Haymarket Theatre""The Zeffirelli Way: Revealing Talk by Florentine Director""Michael Smuin: 1938-2007 / Prolific dance director had showy career"The Life and Art of Edwin BoothRomeo and JulietRomeo and JulietRomeo and JulietRomeo and JulietEasy Read Romeo and JulietRomeo and Julieteeecb12003684p(data)4099369-3n8211610759dbe00d-a9e2-41a3-b2c1-977dd692899302814385X313670221313670221

          Creating closest line along the point''s azimuth using PostgreSQL Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Drawing line between points at specific distance in PostGIS?How to efficiently find the closest point over the dateline?How to find the nearest point by using PostGIS function?PostGIS nearest point with LATERAL JOIN in PostgreSQL 9.3+Creating a table and inserting selected streets using plpgsql functionsCreating a table that stores Distances and other columnSaving select query results (year wise) from PostgreSQL/PostGIS to text filesWhat is the information behind this geometry?How to give start and end vertex ids dynamically in pgr_dijkstra?Point to Polygon nearest distance DS_distance is not using geography index & knn <-> or <#> does not give result in orderLine to point conversion with start point and end point detection?

          Crop image to path created in TikZ? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Crop an inserted image?TikZ pictures does not appear in posterImage behind and beyond crop marks?Tikz picture as large as possible on A4 PageTransparency vs image compression dilemmaHow to crop background from image automatically?Image does not cropTikzexternal capturing crop marks when externalizing pgfplots?How to include image path that contains a dollar signCrop image with left size given