<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mendy Berger</title>
    <description>The latest articles on DEV Community by Mendy Berger (@mendyberger).</description>
    <link>https://dev.to/mendyberger</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F146503%2F9849163c-4381-43df-b48f-3ea50fa43153.jpg</url>
      <title>DEV Community: Mendy Berger</title>
      <link>https://dev.to/mendyberger</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mendyberger"/>
    <language>en</language>
    <item>
      <title>Contributing to Mozilla Developer Network (MDN)</title>
      <dc:creator>Mendy Berger</dc:creator>
      <pubDate>Fri, 30 Oct 2020 15:11:09 +0000</pubDate>
      <link>https://dev.to/mendyberger/contributing-to-mozilla-developer-network-mdn-10l0</link>
      <guid>https://dev.to/mendyberger/contributing-to-mozilla-developer-network-mdn-10l0</guid>
      <description>&lt;p&gt;I'm always looking for ways to both, give back to the #opensource community, and grow my expertise in software engineering.&lt;/p&gt;

&lt;p&gt;I recently saw a post by Chris Mills about the need for contributors for Mozilla Developer Network (MDN), and since they have helped me out so much, I figured that this is a project that I would like to give back to.&lt;/p&gt;

&lt;p&gt;So, I'm taking a challenge upon myself to make 8 quality contributions to any of the MDN projects in the next 2 months, about one contribution for every week.&lt;/p&gt;

&lt;p&gt;I don't know how hard or easy this is going to be but I'm going to try my best.&lt;/p&gt;

&lt;p&gt;I kicked it off with a &lt;a href="https://github.com/mdn/browser-compat-data/pull/7185"&gt;contribution&lt;/a&gt; to browser-compat-data about MediaSession support in Firefox Desktop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/mendyaberger/status/1322194410197655552?s=20"&gt;Twitter version&lt;/a&gt; of this post.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Simple and Tiny CSS Reset</title>
      <dc:creator>Mendy Berger</dc:creator>
      <pubDate>Wed, 14 Oct 2020 03:50:47 +0000</pubDate>
      <link>https://dev.to/mendyberger/simple-tiny-css-reset-50f1</link>
      <guid>https://dev.to/mendyberger/simple-tiny-css-reset-50f1</guid>
      <description>&lt;p&gt;I think that I found my new CSS reset, it's simple, tiny, and elegant&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;all&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;unset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;revert&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I first unset all properties, but I need to revert display to the user-agent-stylesheet default otherwise all elements will be displayed, including elements that are not meant to be displayed like style, script, title, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making it just a little better
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;all&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;unset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;revert&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;default-styles&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;all&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;revert&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Why &lt;code&gt;box-sizing: border-box;&lt;/code&gt;?
&lt;/h4&gt;

&lt;p&gt;I just think that its easier to think of the element with its border as a block instead of thinking of just its content as a block.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why &lt;code&gt;[default-styles]&lt;/code&gt;?
&lt;/h4&gt;

&lt;p&gt;You can add this attribute "&lt;code&gt;default-styles&lt;/code&gt;" to any element that you want to revert the styles back to the default.&lt;br&gt;
This is useful for elements that have default styles that might be useful in some cases, but in most cases, it would end up being overridden, like button, input, select, etc.&lt;/p&gt;
&lt;h2&gt;
  
  
  Fixing SVG problems
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;all&lt;/code&gt; CSS property includes some SVG properties, and unsetting them means losing most of the power of SVG, so we need to exclude all SVG elements, this can be done easily by excluding the SVG namespace&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@namespace&lt;/span&gt; &lt;span class="n"&gt;svg&lt;/span&gt; &lt;span class="s1"&gt;"http://www.w3.org/2000/svg"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nd"&gt;:not&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;svg&lt;/span&gt;&lt;span class="o"&gt;|*)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;all&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;unset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;revert&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;default-styles&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;all&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;revert&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Problem with custom-elements
&lt;/h2&gt;

&lt;p&gt;This will override all styles in &lt;code&gt;:host&lt;/code&gt;, making this approach hard to recommend when working with web components.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Please share your thoughts in the comments section, thanks 🙏&lt;/b&gt;&lt;/p&gt;

</description>
      <category>css</category>
    </item>
    <item>
      <title>Input and JS dates</title>
      <dc:creator>Mendy Berger</dc:creator>
      <pubDate>Tue, 15 Sep 2020 01:00:26 +0000</pubDate>
      <link>https://dev.to/mendyberger/input-and-js-dates-2lhc</link>
      <guid>https://dev.to/mendyberger/input-and-js-dates-2lhc</guid>
      <description>&lt;h1&gt;
  
  
  Making time related inputs work with local timezones - JavaScript
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;HTML supports multiple time-related input types like: &lt;code&gt;time&lt;/code&gt;, &lt;code&gt;date&lt;/code&gt;, &lt;code&gt;week&lt;/code&gt;, &lt;code&gt;month&lt;/code&gt;, and &lt;code&gt;datetime-local&lt;/code&gt;. All this is great, however, there can be one small problem: we need a way to set the value of the input from a JavaScript Date object, as well as a way to get the value from the input into a date object.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;Unless you're on GMT you should see that the hour in the input is different than in the p element&lt;/i&gt;&lt;br&gt;
&lt;iframe height="600" src="https://codepen.io/MendyBerger/embed/qBNdzzR?height=600&amp;amp;default-tab=js,result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  valueAsDate and valueAsNumber
&lt;/h2&gt;

&lt;p&gt;The time-related inputs have a property named &lt;code&gt;valueAsDate&lt;/code&gt; or &lt;code&gt;valueAsNumber&lt;/code&gt; (some have both and some only one), which is a JavaScript Date object or a epoch timestamp number, great no? Well, no, not really, let me explain, the time-related inputs are always on UTC, that is, if the user enters say 9:00 AM in the input, &lt;code&gt;valueAsDate&lt;/code&gt; will return 9:00 AM on UTC not local time, which unless you're on UTC will result in the time being a number of hours off.&lt;/p&gt;

&lt;p&gt;Another problem that &lt;code&gt;valueAsDate&lt;/code&gt; has, is that since &lt;a href="https://caniuse.com/#search=time%20input"&gt;some browsers don't support&lt;/a&gt; (at the time of this writing) some of the time-related inputs, &lt;code&gt;valueAsDate&lt;/code&gt; is therefore also not supported which means that this won't work at all in those browsers instead of gracefully degrading.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution for timezone problem
&lt;/h3&gt;

&lt;p&gt;A possible solution for the timezone problem with &lt;code&gt;valueAsDate&lt;/code&gt; and &lt;code&gt;valueAsNumber&lt;/code&gt; is to move the time with the offset of the current timezone from UTC, so that its actually in the wrong time (because JS Dates are always on UTC, not on local time), but will work to get the input to display the correct time (as mentioned that the input is always on UTC). And then, when we get the date out we can move the time back with the timezone offset.&lt;/p&gt;

&lt;p&gt;When using this technique we have to be careful not to change the source date but to always first make a copy of the date and work on the copy.&lt;/p&gt;

&lt;h4&gt;
  
  
  JavaScript to HTML
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;htmlDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jsDate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// make a copy of the source date&lt;/span&gt;
&lt;span class="nx"&gt;htmlDate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setMinutes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;htmlDate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMinutes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;htmlDate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getTimezoneOffset&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;valueAsDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;htmlDate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Setting by date&lt;/span&gt;
&lt;span class="c1"&gt;// Or:&lt;/span&gt;
&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;valueAsNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;htmlDate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getTime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Setting by number&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  HTML to JavaScript
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// make a copy of the source date&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;jsDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;valueAsDate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Getting by date&lt;/span&gt;
&lt;span class="c1"&gt;// Or:&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;jsDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;valueAsNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Getting by number&lt;/span&gt;

&lt;span class="nx"&gt;jsDate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setMinutes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jsDate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getMinutes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;jsDate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getTimezoneOffset&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Where to use &lt;code&gt;valueAsDate&lt;/code&gt; or &lt;code&gt;valueAsNumber&lt;/code&gt;.
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Input type&lt;/th&gt;
&lt;th&gt;&lt;code&gt;valueAsDate&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;valueAsNumber&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;datetime-local&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No &lt;sup&gt;1&lt;/sup&gt;
&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;time&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;week&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;month&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No &lt;sup&gt;2&lt;/sup&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; &lt;code&gt;datetime-local&lt;/code&gt; doesn't have a &lt;code&gt;valueAsDate&lt;/code&gt; property.&lt;/p&gt;

&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; The &lt;code&gt;valueAsNumber&lt;/code&gt; property of the &lt;code&gt;month&lt;/code&gt; input is not an epoch but the numbers of months since 1970.&lt;/p&gt;

&lt;p&gt;However this only solves the timezone problem, not the browser compatibility problem&lt;/p&gt;

&lt;h2&gt;
  
  
  The solution
&lt;/h2&gt;

&lt;p&gt;Since &lt;code&gt;valueAsDate&lt;/code&gt; and &lt;code&gt;valueAsNumber&lt;/code&gt; won't work in unsupported browsers we can't really use them, rather we'll need a way that can gracefully fallback when the input type isn't supported.&lt;/p&gt;

&lt;p&gt;To get the value from a JavaScript Date object to the HTML input we can use  the &lt;code&gt;Date.toLocalString&lt;/code&gt; method that can get us the proper format for most of these inputs. (I found that the &lt;code&gt;sv-SE&lt;/code&gt; locale is quite close to the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats"&gt;HTML format&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;To get the value from HTML to a JavaScript Date can be a bit more tricky, JavaScript Date objects &lt;strong&gt;require&lt;/strong&gt; both date and time down to the millisecond, there is no such a thing as a date-only or time-only JavaScript object, while &lt;code&gt;datetime-local&lt;/code&gt; has both date and time information, none of the others have all the information to create a proper date just from the input, which means that if we want to get the information from a time-related input to a JavaScript Date we will need to provide the missing information another way.&lt;/p&gt;

&lt;h2&gt;
  
  
  type=datetime-local
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Expected value
&lt;/h3&gt;

&lt;p&gt;The expected value for the &lt;code&gt;datetime-local&lt;/code&gt; input is &lt;code&gt;yyyy-mm-ddThh:mm:ss&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript to HTML
&lt;/h3&gt;

&lt;p&gt;We can use &lt;code&gt;sv-SE&lt;/code&gt; but we'll have to replace the space between the date and time with a &lt;code&gt;T&lt;/code&gt; to make it compatible with HTML.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you have an input without seconds remove &lt;code&gt;second: "2-digit"&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sv-SE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;year&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;numeric&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;month&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;day&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;minute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;second&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;T&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  HTML to JavaScript
&lt;/h3&gt;

&lt;p&gt;Getting the value from a &lt;code&gt;datetime-local&lt;/code&gt; input to a Date object is simple, just pass in input.value to a Date constructor, it will default to the local timezone.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;h2&gt;
  
  
  type=time
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Expected value
&lt;/h3&gt;

&lt;p&gt;The expected value for the &lt;code&gt;time&lt;/code&gt; input is &lt;code&gt;hh:mm:ss&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript to HTML
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;If you have an input without seconds remove &lt;code&gt;second: "2-digit"&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sv-SE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;minute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;second&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  HTML to JavaScript
&lt;/h3&gt;

&lt;p&gt;To get a Date object from the time the user entered we will need a day in the following format &lt;code&gt;yyyy-mm-dd&lt;/code&gt; to attach to the time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt; to get the day from a Date object you can use the same &lt;code&gt;.toLocaleString&lt;/code&gt; options as &lt;code&gt;type=date&lt;/code&gt; uses to get from JavaScript to HTML.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;day&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2020-01-01&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;day&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;T&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;h2&gt;
  
  
  type=date
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Expected value
&lt;/h3&gt;

&lt;p&gt;The expected value for the &lt;code&gt;date&lt;/code&gt; input is &lt;code&gt;yyyy-mm-dd&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript to HTML
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sv-SE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;year&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;numeric&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;month&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;day&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  HTML to JavaScript
&lt;/h3&gt;

&lt;p&gt;The JavaScript Date object constructor has a weird rule, if it gets a date without a time it defaults to UTC instead of the local timezone.&lt;/p&gt;

&lt;p&gt;To get around this we need to enter the time manually, I use 00:00 (12:00 AM) as here but you can change it to whatever time in the day you want.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;T00:00&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;h2&gt;
  
  
  type=month
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Expected value
&lt;/h3&gt;

&lt;p&gt;The expected value for the &lt;code&gt;month&lt;/code&gt; input is &lt;code&gt;yyyy-mm&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript to HTML
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toLocaleString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sv-SE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;year&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;numeric&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;month&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-digit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  HTML to JavaScript
&lt;/h3&gt;

&lt;p&gt;As mentioned before (type=date) we'll need to add the missing parts (day in month, and time) manually.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;-01T:00:00&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;h2&gt;
  
  
  type=week
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Expected value
&lt;/h3&gt;

&lt;p&gt;The expected value for the &lt;code&gt;week&lt;/code&gt; input is &lt;code&gt;yyyy-Www&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This one is not easy, &lt;code&gt;.toLocaleString&lt;/code&gt; doesn't support getting weeks and I'm not aware of any way to create a Date object from week data, so the only way is to use the &lt;code&gt;valueAsDate&lt;/code&gt; or &lt;code&gt;valueAsNumber&lt;/code&gt; with the technique described above, resulting in limited browser support.&lt;/p&gt;

&lt;p&gt;So if you do have any ideas that you think might make this cross platform please let me know.&lt;/p&gt;

</description>
      <category>html</category>
      <category>javascript</category>
      <category>date</category>
    </item>
  </channel>
</rss>
