d

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.

15 St Margarets, NY 10033
(+381) 11 123 4567
ouroffice@aware.com

 

KMF

Localizing Dates in a Perl Web App With JavaScript

Last week’s article received a comment on a private Facebook group that amounted to “just use JavaScript’s built-in formatting.” So what would that look like?

sub ($c) { $c->render( template => ‘index’, date => DateTime->today ) };

helper localize_date => sub ( $c, $date = DateTime->today, $style=”full” ) {
my $date_params = join ‘,’ => $date->year, $date->month_0, $date->day;
return
qq;
};

app->start;
__DATA__

@@ index.html.ep
% layout ‘default’;
% title ‘Today’;

  • % for my $style ( qw(long medium short) ) {

  • % }

@@ layouts/default.html.ep

</p><p>” data-lang=”text/x-perl”></p><p> </new></div></div></div><p>It’s structured much like the Perl-only solution, with a default <code>"https://dzone.com/"</code> route and a <code>localize_date</code> Mojolicious helper to do the formatting. I opted to output a piece of JavaScript from the helper on <strong>lines 11 through 14</strong> since it could be repeated several times in a document. You could instead declare a function in the default layout’s HTML <code><head></code> on line 38 that would receive a date and a formatting style, outputting the resulting formatted date.</p><p>In the template’s list from <strong>lines 22 through 31</strong> I decided to use JavaScript <code>document.write</code> method calls to add our generated code. This has a slew of caveats but works for our example here.</p><p>Worth noting is the double equals sign (<code><%== %></code>) when embedding a Perl expression. This prevents Mojolicious from XML-escaping special characters, e.g., replacing <code>"</code>quotes<code>"</code> with <code>&quot;</code>, <code><</code>angle brackets<code>></code> with <code>&lt;</code> and <code>&gt;</code>, etc. This is important when returning HTML and JavaScript code.</p><p>I also chose to use the JavaScript <code>Date</code> object’s <code>toLocaleString()</code> method for my formatting on <strong>line 12</strong>. There are other ways to do this:</p><ul><li>Date objects also have a <code>toLocaleDateString</code> method. However, Mozilla has a performance note that states it’s better to use the <code>Intl.DateTimeFormat</code> object’s property.</li><li>But <code>Intl.DateTimeFormat</code>‘s browser support stands at about 70%, leaving out Safari (that’s Mac, iPhone, and iPad) and Internet Explorer users.</li><li>There are JavaScript libraries and polyfills to address these issues, but I’m trying to keep this example simple.</li></ul><p>Note that <strong>line 10</strong> builds the parameters for JavaScript’s <code>Date</code> constructor using the , <code>_0</code>, and methods of our Perl object; <code>month_0</code> because the <code>Date</code> constructor takes its month as an integer from 0 to 11 rather than 1 to 12. JavaScript <code>Date</code>s can be constructed in many ways; this seemed the simplest without having to explain things like epochs and inconsistent parsing.</p><p>Why are we using Perl <code>DateTime</code>s and a helper anyway? I’m assuming that our dates are coming from the backend of our application, possibly inflated from a database column. If your dates are strictly on the frontend, you might decide to put your formatting code there in a JavaScript function, perhaps using a JavaScript-based templating library.</p><p>The bottom line is to do whatever makes sense for your situation. I prefer the Perl solution because I like the language and its ecosystem and perhaps have acclimated to its quirks. The complications of JavaScript browser support, competing frameworks, and layers of tooling make my head hurt. Despite this, I’m still learning; if you have any comments or suggestions, please leave them below.</p></div></div><p>Credit: <a href="https://dzone.com/articles/localizing-dates-in-a-perl-web-application-with-ja"target="_blank">Source link</a></p></div></div></div><div class="mkdf-post-info-bottom clearfix"><div class="mkdf-post-info-bottom-left"></div><div class="mkdf-post-info-bottom-right"><div class="mkdf-blog-share"><div class="mkdf-social-share-holder mkdf-dropdown"> <a class="mkdf-social-share-dropdown-opener" href="javascript:void(0)"> <i class="fa fa-share-alt"></i> </a><div class="mkdf-social-share-dropdown"><ul><li class="mkdf-facebook-share"> <a itemprop="url" class="mkdf-share-link" href="#" onclick="window.open('http://www.facebook.com/sharer.php?u=https%3A%2F%2Fkmfinfotech.com%2F2021%2F05%2F16%2Flocalizing-dates-in-a-perl-web-app-with-javascript%2F', 'sharer', 'toolbar=0,status=0,width=620,height=280');"> <span class="mkdf-social-network-icon fa fa-facebook"></span> </a></li><li class="mkdf-twitter-share"> <a itemprop="url" class="mkdf-share-link" href="#" onclick="window.open('https://twitter.com/share?text=Last+week%26%238217%3Bs+article+received+a+comment+on+a+private+Facebook+group+that+amounted+to+%26%238220%3Bjust+use+&url=https://kmfinfotech.com/2021/05/16/localizing-dates-in-a-perl-web-app-with-javascript/', 'popupwindow', 'scrollbars=yes,width=800,height=400');"> <span class="mkdf-social-network-icon fa fa-twitter"></span> </a></li><li class="mkdf-google_plus-share"> <a itemprop="url" class="mkdf-share-link" href="#" onclick="popUp=window.open('https://plus.google.com/share?url=https%3A%2F%2Fkmfinfotech.com%2F2021%2F05%2F16%2Flocalizing-dates-in-a-perl-web-app-with-javascript%2F', 'popupwindow', 'scrollbars=yes,width=800,height=400');popUp.focus();return false;"> <span class="mkdf-social-network-icon fa fa-google-plus"></span> </a></li><li class="mkdf-linkedin-share"> <a itemprop="url" class="mkdf-share-link" href="#" onclick="popUp=window.open('http://linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fkmfinfotech.com%2F2021%2F05%2F16%2Flocalizing-dates-in-a-perl-web-app-with-javascript%2F&title=Localizing+Dates+in+a+Perl+Web+App+With+JavaScript', 'popupwindow', 'scrollbars=yes,width=800,height=400');popUp.focus();return false;"> <span class="mkdf-social-network-icon fa fa-linkedin"></span> </a></li><li class="mkdf-tumblr-share"> <a itemprop="url" class="mkdf-share-link" href="#" onclick="popUp=window.open('http://www.tumblr.com/share/link?url=https%3A%2F%2Fkmfinfotech.com%2F2021%2F05%2F16%2Flocalizing-dates-in-a-perl-web-app-with-javascript%2F&name=Localizing+Dates+in+a+Perl+Web+App+With+JavaScript&description=Last+week%26%238217%3Bs+article+received+a+comment+on+a+private+Facebook+group+that+amounted+to+%26%238220%3Bjust+use+JavaScript%26%238217%3Bs+built-in+formatting.%26%238221%3B+So+what+would+that+look+like%3F+sub+%28%24c%29+%7B+%24c-%26gt%3Brender%28+template+%3D%26gt%3B+%26%238216%3Bindex%26%238217%3B%2C+date+%3D%26gt%3B+DateTime-%26gt%3Btoday+%29+%7D%3B+helper+localize_date+%3D%26gt%3B+%5B%26hellip%3B%5D', 'popupwindow', 'scrollbars=yes,width=800,height=400');popUp.focus();return false;"> <span class="mkdf-social-network-icon fa fa-tumblr"></span> </a></li><li class="mkdf-pinterest-share"> <a itemprop="url" class="mkdf-share-link" href="#" onclick="popUp=window.open('http://pinterest.com/pin/create/button/?url=https%3A%2F%2Fkmfinfotech.com%2F2021%2F05%2F16%2Flocalizing-dates-in-a-perl-web-app-with-javascript%2F&description=Localizing+Dates+in+a+Perl+Web+App+With+JavaScript&media=https%3A%2F%2Fkmfinfotech.com%2Fwp-content%2Fuploads%2F2021%2F05%2F14699865-thumb.jpg', 'popupwindow', 'scrollbars=yes,width=800,height=400');popUp.focus();return false;"> <span class="mkdf-social-network-icon fa fa-pinterest"></span> </a></li></ul></div></div></div></div></div></div></article><div class="mkdf-blog-single-navigation"><div class="mkdf-blog-single-navigation-inner clearfix"> <a itemprop="url" class="mkdf-blog-single-prev" href="https://kmfinfotech.com/2021/05/16/google-on-whats-going-on-with-faq-rich-results/"> <span class="mkdf-blog-single-nav-mark fa fa-arrow-left"></span> <span class="mkdf-blog-single-nav-label">Google on What’s Going on With FAQ Rich Results</span> </a> <a itemprop="url" class="mkdf-blog-single-next" href="https://kmfinfotech.com/2021/05/16/c9-0-is-here-dealing-with-record-keyword-errors/"> <span class="mkdf-blog-single-nav-mark fa fa-arrow-right"></span> <span class="mkdf-blog-single-nav-label">C#9.0 Is Here: Dealing With Record Keyword Errors</span> </a></div></div><div id="disqus_thread"></div></div></div><div class="mkdf-sidebar-holder mkdf-grid-col-3"><aside class="mkdf-sidebar"><div class="widget widget_search"><form role="search" method="get" class="searchform" id="searchform-541" action="https://kmfinfotech.com/"> <label class="screen-reader-text">Search for:</label><div class="input-holder clearfix"> <input type="search" class="search-field" placeholder="Search..." value="" name="s" title="Search for:"/> <button type="submit" class="mkdf-search-submit"><i class="mkdf-icon-font-awesome fa fa-search " ></i></button></div></form></div><div class="widget mkdf-recent-post-widget"><div class="mkdf-widget-title-holder"><h5 class="mkdf-widget-title">Latest Blogs</h5></div><ul class="mkdf-recent-posts"><li class="mkdf-rp-item"><a href="https://kmfinfotech.com/2022/10/12/laravel-9-35-released/"><div class="mkdf-rp-image"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MiIgaGVpZ2h0PSI4MiIgdmlld0JveD0iMCAwIDgyIDgyIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSIjY2ZkNGRiIi8+PC9zdmc+" width="82" height="82" data-src="https://kmfinfotech.com/wp-content/uploads/2022/03/laravel9-1646792144-150x150.jpg" class="attachment-82x82 size-82x82 wp-post-image" alt="" decoding="async" loading="lazy" data-srcset="https://kmfinfotech.com/wp-content/uploads/2022/03/laravel9-1646792144-150x150.jpg 150w, https://kmfinfotech.com/wp-content/uploads/2022/03/laravel9-1646792144-1024x1024.jpg 1024w, https://kmfinfotech.com/wp-content/uploads/2022/03/laravel9-1646792144-700x700.jpg 700w, https://kmfinfotech.com/wp-content/uploads/2022/03/laravel9-1646792144-300x300.jpg 300w, https://kmfinfotech.com/wp-content/uploads/2022/03/laravel9-1646792144-550x550.jpg 550w, https://kmfinfotech.com/wp-content/uploads/2022/03/laravel9-1646792144-1100x1100.jpg 1100w" data-sizes="(max-width: 82px) 100vw, 82px" /></div><p class="mkdf-rp-title"><span class="mkdf-rp-title-text">Laravel 9.35 Released</span><span class="mkdf-rp-date">October 12, 2022</span></p></a></li><li class="mkdf-rp-item"><a href="https://kmfinfotech.com/2022/08/20/join-the-wordpress-world-photography-day-challenge-wp-tavern/"><div class="mkdf-rp-image"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MiIgaGVpZ2h0PSI4MiIgdmlld0JveD0iMCAwIDgyIDgyIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSIjY2ZkNGRiIi8+PC9zdmc+" width="82" height="82" data-src="https://kmfinfotech.com/wp-content/uploads/2022/08/ice-cream-cone-150x150.jpg" class="attachment-82x82 size-82x82 wp-post-image" alt="" decoding="async" loading="lazy" data-srcset="https://kmfinfotech.com/wp-content/uploads/2022/08/ice-cream-cone-150x150.jpg 150w, https://kmfinfotech.com/wp-content/uploads/2022/08/ice-cream-cone-1024x1024.jpg 1024w, https://kmfinfotech.com/wp-content/uploads/2022/08/ice-cream-cone-700x700.jpg 700w, https://kmfinfotech.com/wp-content/uploads/2022/08/ice-cream-cone-300x300.jpg 300w, https://kmfinfotech.com/wp-content/uploads/2022/08/ice-cream-cone-550x550.jpg 550w, https://kmfinfotech.com/wp-content/uploads/2022/08/ice-cream-cone-1100x1100.jpg 1100w" data-sizes="(max-width: 82px) 100vw, 82px" /></div><p class="mkdf-rp-title"><span class="mkdf-rp-title-text">Join the WordPress World Photography Day Challenge – WP Tavern</span><span class="mkdf-rp-date">August 20, 2022</span></p></a></li><li class="mkdf-rp-item"><a href="https://kmfinfotech.com/2022/08/19/how-to-see-google-search-results-and-rankings-for-different-locations/"><div class="mkdf-rp-image"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MiIgaGVpZ2h0PSI4MiIgdmlld0JveD0iMCAwIDgyIDgyIj48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSIjY2ZkNGRiIi8+PC9zdmc+" width="82" height="82" data-src="https://kmfinfotech.com/wp-content/uploads/2022/08/local-search-1600-x-840-62de29881f947-sej-150x150.png" class="attachment-82x82 size-82x82 wp-post-image" alt="" decoding="async" loading="lazy" data-srcset="https://kmfinfotech.com/wp-content/uploads/2022/08/local-search-1600-x-840-62de29881f947-sej-150x150.png 150w, https://kmfinfotech.com/wp-content/uploads/2022/08/local-search-1600-x-840-62de29881f947-sej-700x700.png 700w, https://kmfinfotech.com/wp-content/uploads/2022/08/local-search-1600-x-840-62de29881f947-sej-300x300.png 300w, https://kmfinfotech.com/wp-content/uploads/2022/08/local-search-1600-x-840-62de29881f947-sej-550x550.png 550w" data-sizes="(max-width: 82px) 100vw, 82px" /></div><p class="mkdf-rp-title"><span class="mkdf-rp-title-text">How To See Google Search Results And Rankings For Different Locations</span><span class="mkdf-rp-date">August 19, 2022</span></p></a></li></ul></div><div class="widget mkdf-separator-widget"><div class="mkdf-separator-holder clearfix mkdf-separator-center mkdf-separator-normal"><div class="mkdf-separator" style="border-style: solid;border-bottom-width: 1px;margin-top: -7px"></div></div></div><div class="widget mkdf-separator-widget"><div class="mkdf-separator-holder clearfix mkdf-separator-center mkdf-separator-normal"><div class="mkdf-separator" style="border-style: solid;border-bottom-width: 1px;margin-top: -7px"></div></div></div><div class="widget mkdf-social-icons-group-widget text-align-left"><div class="mkdf-widget-title-holder"><h5 class="mkdf-widget-title">Follow Us</h5></div> <a class="mkdf-social-icon-widget-holder mkdf-icon-has-hover" style="color: #6f6f6f;;font-size: 18px;margin: -12px 13px 0px 0px;" href="https://www.facebook.com/KMF-Infotech-841640932901967/" target="_blank"> <span class="mkdf-social-icon-widget fa fa-facebook"></span> </a> <a class="mkdf-social-icon-widget-holder mkdf-icon-has-hover" style="color: #6f6f6f;;font-size: 18px;margin: -12px 13px 0px 0px;" href="https://twitter.com/kmfinfotech" target="_blank"> <span class="mkdf-social-icon-widget fa fa-twitter"></span> </a> <a class="mkdf-social-icon-widget-holder mkdf-icon-has-hover" style="color: #6f6f6f;;font-size: 18px;margin: -12px 13px 0px 0px;" href="https://www.linkedin.com/company/kmf-infotech" target="_blank"> <span class="mkdf-social-icon-widget fa fa-linkedin"></span> </a> <a class="mkdf-social-icon-widget-holder mkdf-icon-has-hover" style="color: #6f6f6f;;font-size: 18px;margin: -12px 13px 0px 0px;" href="https://www.instagram.com/kmfinfotech/" target="_blank"> <span class="mkdf-social-icon-widget fa fa-instagram"></span> </a> <a class="mkdf-social-icon-widget-holder mkdf-icon-has-hover" style="color: #6f6f6f;;font-size: 18px;margin: -12px 13px 0px 0px;" href="https://in.pinterest.com/4a3699b8ebada198f3c980b2a31c5f/kmf-infotech/" target="_blank"> <span class="mkdf-social-icon-widget fa fa-pinterest"></span> </a> <a class="mkdf-social-icon-widget-holder mkdf-icon-has-hover" style="color: #6f6f6f;;font-size: 18px;margin: -12px 13px 0px 0px;" href="https://kmfinfotech.tumblr.com/" target="_blank"> <span class="mkdf-social-icon-widget fa fa-tumblr"></span> </a></div></aside></div></div></div></div></div></div><footer class="mkdf-page-footer "><div class="mkdf-footer-top-holder"><div class="mkdf-footer-top-inner mkdf-grid"><div class="mkdf-grid-row mkdf-footer-top-alignment-left"><div class="mkdf-column-content mkdf-grid-col-5 footer-box"> <img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNjAiIGhlaWdodD0iODAiIHZpZXdCb3g9IjAgMCAzNjAgODAiPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9IiNjZmQ0ZGIiLz48L3N2Zz4=" width="360" height="80" data-src="https://kmfinfotech.com/wp-content/uploads/2021/07/kmf-footer-logo.png" alt=""><p>KMF is a powerful combination of profound tech expertise, and proven experience in a variety of business domains to turn your business idea into reality.</p><p>Mail us at <b><a class="mail-to" href="mailto:hello@kmfinfotech.com">hello@kmfinfotech.com</a></b></p><p>Connect with Us</p><div class="social-media"> <a href="https://www.facebook.com/KMF-Infotech-841640932901967/"><i class="fa fa-facebook"></i></a> <a href="https://twitter.com/kmfinfotech"><i class="fa fa-twitter"></i></a> <a href="https://www.linkedin.com/company/kmf-infotech"><i class="fa fa-linkedin"></i></a> <a href="https://www.instagram.com/kmfinfotech/"><i class="fa fa-instagram"></i></a> <a href="https://in.pinterest.com/4a3699b8ebada198f3c980b2a31c5f/kmf-infotech/"><i class="fa fa-pinterest-p"></i></a> <a href="https://kmfinfotech.tumblr.com/"><i class="fa fa-tumblr"></i></a></div></div><div class="mkdf-column-content mkdf-grid-col-7 footer-right"><div class="footer-col"><h6>Services</h6><ul><li><a href="https://kmfinfotech.com/web_design/">Web Designing</a></li><li><a href="https://kmfinfotech.com/our-servicesweb-technology/">Web Development</a></li><li><a href="https://kmfinfotech.com/mobile_application/">Mobile Application</a></li><li><a href="https://kmfinfotech.com/our-servicesonline-marketing/">Online Marketing</a></li><li><a href="https://kmfinfotech.com/our-servicesbranding/">Branding</a></li><li><a href="https://kmfinfotech.com/our-servicesvideo-animation-production/">Video Animation Production</a></li></ul></div><div class="footer-col"><ul><li><a href="#"></a></li><li><a href="https://kmfinfotech.com/portfolio/"></a></li><li><a href="#"></a></li><li><a href="https://www.kmfinfotech.com/blog/"></a></li></ul></div><div class="footer-col"><h6>Latest Blogs</h6><ul><li><a href="https://kmfinfotech.com/2022/10/12/laravel-9-35-released/">Laravel 9.35 Released</a></li><li><a href="https://kmfinfotech.com/2022/08/20/join-the-wordpress-world-photography-day-challenge-wp-tavern/">Join the WordPress World Photography Day Challenge – WP Tavern</a></li><li><a href="https://kmfinfotech.com/2022/08/19/how-to-see-google-search-results-and-rankings-for-different-locations/">How To See Google Search Results And Rankings For Different Locations</a></li></ul></div><div class="address-section"> <address> <strong>UNITED STATES</strong> <span>201 St Charles Ave Suite 2500,<br> New Orleans, LA 70170<br> <a href="tel:+1-504-446-7169">+1 504-446-7169</a> </span> </address> <address> <strong>CANADA</strong> <span>210 Richmond St W<br> Toronto,ON M5V 1V6<br> <a href="tel:+1-437-537-5167">+1 437-537-5167</a> </span> </address> <address> <strong>INDIA</strong> <span>33/29, GALI NO 10, Bhikam Singh Colony,<br> Vishwas Nagar, Shahdara, Delhi-110032<br> <a href="tel:+91-9818988070">+91 9818988070</a> </span> </address></div></div></div></div></div><div class="footer-bottom"><div class="copyright"><p>Copyright © 2012 - 2022 KMF INFOTECH. All Rights Reserved.</p></div></div></footer></div></div> <script type="litespeed/javascript">window.RS_MODULES=window.RS_MODULES||{};window.RS_MODULES.modules=window.RS_MODULES.modules||{};window.RS_MODULES.waiting=window.RS_MODULES.waiting||[];window.RS_MODULES.defered=!1;window.RS_MODULES.moduleWaiting=window.RS_MODULES.moduleWaiting||{};window.RS_MODULES.type='compiled'</script> <div class="eg-everest-lightbox-overlay"><div class="eg-everest-lightbox-controls"> <span class="eg-everest-lightbox-previous">Previous</span> <span class="eg-everest-lightbox-next">Next</span></div><div class="eg-close-pop-up"> <span class="eg-everest-lightbox-close">Close</span></div><div class="eg-everest-lightbox-inner-overlay"></div><div class="eg-everest-lightbox-wrap"><div class="eg-everest-lightbox-source-holder"> <img src=""/></div><div class="eg-everest-lightbox-details-wrap"><div class="eg-everest-lightbox-caption">Test Caption</div><div class="eg-everest-lightbox-description">Test Description goes like this</div></div></div></div> <script type="litespeed/javascript">(function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];js=d.createElement(s);js.id=id;js.src='https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js#xfbml=1&version=v6.0&autoLogAppEvents=1' fjs.parentNode.insertBefore(js,fjs)}(document,'script','facebook-jssdk'))</script> <div class="fb-customerchat" attribution="wordpress" attribution_version="2.3" page_id="841640932901967"></div> <script type="litespeed/javascript">var uid='359924';var wid='663542';var pop_tag=document.createElement('script');pop_tag.src='//cdn.popcash.net/show.js';document.body.appendChild(pop_tag);pop_tag.onerror=function(){pop_tag=document.createElement('script');pop_tag.src='//cdn2.popcash.net/show.js';document.body.appendChild(pop_tag)}</script> <noscript> <iframe data-lazyloaded="1" src="about:blank" data-litespeed-src="https://www.googletagmanager.com/ns.html?id=GTM-WZTQC3B" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript> <style id='core-block-supports-inline-css' type='text/css'>/** * Core styles: block-supports */</style><style id='rs-plugin-settings-inline-css' type='text/css'>#rs-demo-id {}</style> <script id='disqus_count-js-extra' type="litespeed/javascript">var countVars={"disqusShortname":"kmfinfotech"}</script> <script id='disqus_embed-js-extra' type="litespeed/javascript">var embedVars={"disqusConfig":{"integration":"wordpress 3.0.22"},"disqusIdentifier":"6510 https:\/\/kmfinfotech.com\/blog\/localizing-dates-in-a-perl-web-app-with-javascript\/","disqusShortname":"kmfinfotech","disqusTitle":"Localizing Dates in a Perl Web App With JavaScript","disqusUrl":"https:\/\/kmfinfotech.com\/2021\/05\/16\/localizing-dates-in-a-perl-web-app-with-javascript\/","postId":"6510"}</script> <script id='mediaelement-core-js-before' type="litespeed/javascript">var mejsL10n={"language":"en","strings":{"mejs.download-file":"Download File","mejs.install-flash":"You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https:\/\/get.adobe.com\/flashplayer\/","mejs.fullscreen":"Fullscreen","mejs.play":"Play","mejs.pause":"Pause","mejs.time-slider":"Time Slider","mejs.time-help-text":"Use Left\/Right Arrow keys to advance one second, Up\/Down arrows to advance ten seconds.","mejs.live-broadcast":"Live Broadcast","mejs.volume-help-text":"Use Up\/Down Arrow keys to increase or decrease volume.","mejs.unmute":"Unmute","mejs.mute":"Mute","mejs.volume-slider":"Volume Slider","mejs.video-player":"Video Player","mejs.audio-player":"Audio Player","mejs.captions-subtitles":"Captions\/Subtitles","mejs.captions-chapters":"Chapters","mejs.none":"None","mejs.afrikaans":"Afrikaans","mejs.albanian":"Albanian","mejs.arabic":"Arabic","mejs.belarusian":"Belarusian","mejs.bulgarian":"Bulgarian","mejs.catalan":"Catalan","mejs.chinese":"Chinese","mejs.chinese-simplified":"Chinese (Simplified)","mejs.chinese-traditional":"Chinese (Traditional)","mejs.croatian":"Croatian","mejs.czech":"Czech","mejs.danish":"Danish","mejs.dutch":"Dutch","mejs.english":"English","mejs.estonian":"Estonian","mejs.filipino":"Filipino","mejs.finnish":"Finnish","mejs.french":"French","mejs.galician":"Galician","mejs.german":"German","mejs.greek":"Greek","mejs.haitian-creole":"Haitian Creole","mejs.hebrew":"Hebrew","mejs.hindi":"Hindi","mejs.hungarian":"Hungarian","mejs.icelandic":"Icelandic","mejs.indonesian":"Indonesian","mejs.irish":"Irish","mejs.italian":"Italian","mejs.japanese":"Japanese","mejs.korean":"Korean","mejs.latvian":"Latvian","mejs.lithuanian":"Lithuanian","mejs.macedonian":"Macedonian","mejs.malay":"Malay","mejs.maltese":"Maltese","mejs.norwegian":"Norwegian","mejs.persian":"Persian","mejs.polish":"Polish","mejs.portuguese":"Portuguese","mejs.romanian":"Romanian","mejs.russian":"Russian","mejs.serbian":"Serbian","mejs.slovak":"Slovak","mejs.slovenian":"Slovenian","mejs.spanish":"Spanish","mejs.swahili":"Swahili","mejs.swedish":"Swedish","mejs.tagalog":"Tagalog","mejs.thai":"Thai","mejs.turkish":"Turkish","mejs.ukrainian":"Ukrainian","mejs.vietnamese":"Vietnamese","mejs.welsh":"Welsh","mejs.yiddish":"Yiddish"}}</script> <script id='mediaelement-js-extra' type="litespeed/javascript">var _wpmejsSettings={"pluginPath":"\/wp-includes\/js\/mediaelement\/","classPrefix":"mejs-","stretching":"responsive"}</script> <script type="litespeed/javascript" data-src='https://kmfinfotech.com/wp-content/themes/gluck/assets/js/modules/plugins/perfect-scrollbar.jquery.min.js?ver=6.1.1' id='perfect-scrollbar-js'></script> <script id='gluck-mikado-modules-js-extra' type="litespeed/javascript">var mkdfGlobalVars={"vars":{"mkdfAddForAdminBar":0,"mkdfElementAppearAmount":-100,"mkdfAjaxUrl":"https:\/\/kmfinfotech.com\/wp-admin\/admin-ajax.php","mkdfStickyHeaderHeight":0,"mkdfStickyHeaderTransparencyHeight":70,"mkdfTopBarHeight":35,"mkdfLogoAreaHeight":0,"mkdfMenuAreaHeight":125,"mkdfMobileHeaderHeight":100}};var mkdfPerPageVars={"vars":{"mkdfMobileHeaderHeight":100,"mkdfStickyScrollAmount":0,"mkdfHeaderTransparencyHeight":0,"mkdfHeaderVerticalWidth":0}}</script> <script data-no-optimize="1">!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).LazyLoad=e()}(this,function(){"use strict";function e(){return(e=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n,a=arguments[e];for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(t[n]=a[n])}return t}).apply(this,arguments)}function i(t){return e({},it,t)}function o(t,e){var n,a="LazyLoad::Initialized",i=new t(e);try{n=new CustomEvent(a,{detail:{instance:i}})}catch(t){(n=document.createEvent("CustomEvent")).initCustomEvent(a,!1,!1,{instance:i})}window.dispatchEvent(n)}function l(t,e){return t.getAttribute(gt+e)}function c(t){return l(t,bt)}function s(t,e){return function(t,e,n){e=gt+e;null!==n?t.setAttribute(e,n):t.removeAttribute(e)}(t,bt,e)}function r(t){return s(t,null),0}function u(t){return null===c(t)}function d(t){return c(t)===vt}function f(t,e,n,a){t&&(void 0===a?void 0===n?t(e):t(e,n):t(e,n,a))}function _(t,e){nt?t.classList.add(e):t.className+=(t.className?" ":"")+e}function v(t,e){nt?t.classList.remove(e):t.className=t.className.replace(new RegExp("(^|\\s+)"+e+"(\\s+|$)")," ").replace(/^\s+/,"").replace(/\s+$/,"")}function g(t){return t.llTempImage}function b(t,e){!e||(e=e._observer)&&e.unobserve(t)}function p(t,e){t&&(t.loadingCount+=e)}function h(t,e){t&&(t.toLoadCount=e)}function n(t){for(var e,n=[],a=0;e=t.children[a];a+=1)"SOURCE"===e.tagName&&n.push(e);return n}function m(t,e){(t=t.parentNode)&&"PICTURE"===t.tagName&&n(t).forEach(e)}function a(t,e){n(t).forEach(e)}function E(t){return!!t[st]}function I(t){return t[st]}function y(t){return delete t[st]}function A(e,t){var n;E(e)||(n={},t.forEach(function(t){n[t]=e.getAttribute(t)}),e[st]=n)}function k(a,t){var i;E(a)&&(i=I(a),t.forEach(function(t){var e,n;e=a,(t=i[n=t])?e.setAttribute(n,t):e.removeAttribute(n)}))}function L(t,e,n){_(t,e.class_loading),s(t,ut),n&&(p(n,1),f(e.callback_loading,t,n))}function w(t,e,n){n&&t.setAttribute(e,n)}function x(t,e){w(t,ct,l(t,e.data_sizes)),w(t,rt,l(t,e.data_srcset)),w(t,ot,l(t,e.data_src))}function O(t,e,n){var a=l(t,e.data_bg_multi),i=l(t,e.data_bg_multi_hidpi);(a=at&&i?i:a)&&(t.style.backgroundImage=a,n=n,_(t=t,(e=e).class_applied),s(t,ft),n&&(e.unobserve_completed&&b(t,e),f(e.callback_applied,t,n)))}function N(t,e){!e||0<e.loadingCount||0<e.toLoadCount||f(t.callback_finish,e)}function C(t,e,n){t.addEventListener(e,n),t.llEvLisnrs[e]=n}function M(t){return!!t.llEvLisnrs}function z(t){if(M(t)){var e,n,a=t.llEvLisnrs;for(e in a){var i=a[e];n=e,i=i,t.removeEventListener(n,i)}delete t.llEvLisnrs}}function R(t,e,n){var a;delete t.llTempImage,p(n,-1),(a=n)&&--a.toLoadCount,v(t,e.class_loading),e.unobserve_completed&&b(t,n)}function T(o,r,c){var l=g(o)||o;M(l)||function(t,e,n){M(t)||(t.llEvLisnrs={});var a="VIDEO"===t.tagName?"loadeddata":"load";C(t,a,e),C(t,"error",n)}(l,function(t){var e,n,a,i;n=r,a=c,i=d(e=o),R(e,n,a),_(e,n.class_loaded),s(e,dt),f(n.callback_loaded,e,a),i||N(n,a),z(l)},function(t){var e,n,a,i;n=r,a=c,i=d(e=o),R(e,n,a),_(e,n.class_error),s(e,_t),f(n.callback_error,e,a),i||N(n,a),z(l)})}function G(t,e,n){var a,i,o,r,c;t.llTempImage=document.createElement("IMG"),T(t,e,n),E(c=t)||(c[st]={backgroundImage:c.style.backgroundImage}),o=n,r=l(a=t,(i=e).data_bg),c=l(a,i.data_bg_hidpi),(r=at&&c?c:r)&&(a.style.backgroundImage='url("'.concat(r,'")'),g(a).setAttribute(ot,r),L(a,i,o)),O(t,e,n)}function D(t,e,n){var a;T(t,e,n),a=e,e=n,(t=It[(n=t).tagName])&&(t(n,a),L(n,a,e))}function V(t,e,n){var a;a=t,(-1<yt.indexOf(a.tagName)?D:G)(t,e,n)}function F(t,e,n){var a;t.setAttribute("loading","lazy"),T(t,e,n),a=e,(e=It[(n=t).tagName])&&e(n,a),s(t,vt)}function j(t){t.removeAttribute(ot),t.removeAttribute(rt),t.removeAttribute(ct)}function P(t){m(t,function(t){k(t,Et)}),k(t,Et)}function S(t){var e;(e=At[t.tagName])?e(t):E(e=t)&&(t=I(e),e.style.backgroundImage=t.backgroundImage)}function U(t,e){var n;S(t),n=e,u(e=t)||d(e)||(v(e,n.class_entered),v(e,n.class_exited),v(e,n.class_applied),v(e,n.class_loading),v(e,n.class_loaded),v(e,n.class_error)),r(t),y(t)}function $(t,e,n,a){var i;n.cancel_on_exit&&(c(t)!==ut||"IMG"===t.tagName&&(z(t),m(i=t,function(t){j(t)}),j(i),P(t),v(t,n.class_loading),p(a,-1),r(t),f(n.callback_cancel,t,e,a)))}function q(t,e,n,a){var i,o,r=(o=t,0<=pt.indexOf(c(o)));s(t,"entered"),_(t,n.class_entered),v(t,n.class_exited),i=t,o=a,n.unobserve_entered&&b(i,o),f(n.callback_enter,t,e,a),r||V(t,n,a)}function H(t){return t.use_native&&"loading"in HTMLImageElement.prototype}function B(t,i,o){t.forEach(function(t){return(a=t).isIntersecting||0<a.intersectionRatio?q(t.target,t,i,o):(e=t.target,n=t,a=i,t=o,void(u(e)||(_(e,a.class_exited),$(e,n,a,t),f(a.callback_exit,e,n,t))));var e,n,a})}function J(e,n){var t;et&&!H(e)&&(n._observer=new IntersectionObserver(function(t){B(t,e,n)},{root:(t=e).container===document?null:t.container,rootMargin:t.thresholds||t.threshold+"px"}))}function K(t){return Array.prototype.slice.call(t)}function Q(t){return t.container.querySelectorAll(t.elements_selector)}function W(t){return c(t)===_t}function X(t,e){return e=t||Q(e),K(e).filter(u)}function Y(e,t){var n;(n=Q(e),K(n).filter(W)).forEach(function(t){v(t,e.class_error),r(t)}),t.update()}function t(t,e){var n,a,t=i(t);this._settings=t,this.loadingCount=0,J(t,this),n=t,a=this,Z&&window.addEventListener("online",function(){Y(n,a)}),this.update(e)}var Z="undefined"!=typeof window,tt=Z&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),et=Z&&"IntersectionObserver"in window,nt=Z&&"classList"in document.createElement("p"),at=Z&&1<window.devicePixelRatio,it={elements_selector:".lazy",container:tt||Z?document:null,threshold:300,thresholds:null,data_src:"src",data_srcset:"srcset",data_sizes:"sizes",data_bg:"bg",data_bg_hidpi:"bg-hidpi",data_bg_multi:"bg-multi",data_bg_multi_hidpi:"bg-multi-hidpi",data_poster:"poster",class_applied:"applied",class_loading:"litespeed-loading",class_loaded:"litespeed-loaded",class_error:"error",class_entered:"entered",class_exited:"exited",unobserve_completed:!0,unobserve_entered:!1,cancel_on_exit:!0,callback_enter:null,callback_exit:null,callback_applied:null,callback_loading:null,callback_loaded:null,callback_error:null,callback_finish:null,callback_cancel:null,use_native:!1},ot="src",rt="srcset",ct="sizes",lt="poster",st="llOriginalAttrs",ut="loading",dt="loaded",ft="applied",_t="error",vt="native",gt="data-",bt="ll-status",pt=[ut,dt,ft,_t],ht=[ot],mt=[ot,lt],Et=[ot,rt,ct],It={IMG:function(t,e){m(t,function(t){A(t,Et),x(t,e)}),A(t,Et),x(t,e)},IFRAME:function(t,e){A(t,ht),w(t,ot,l(t,e.data_src))},VIDEO:function(t,e){a(t,function(t){A(t,ht),w(t,ot,l(t,e.data_src))}),A(t,mt),w(t,lt,l(t,e.data_poster)),w(t,ot,l(t,e.data_src)),t.load()}},yt=["IMG","IFRAME","VIDEO"],At={IMG:P,IFRAME:function(t){k(t,ht)},VIDEO:function(t){a(t,function(t){k(t,ht)}),k(t,mt),t.load()}},kt=["IMG","IFRAME","VIDEO"];return t.prototype={update:function(t){var e,n,a,i=this._settings,o=X(t,i);{if(h(this,o.length),!tt&&et)return H(i)?(e=i,n=this,o.forEach(function(t){-1!==kt.indexOf(t.tagName)&&F(t,e,n)}),void h(n,0)):(t=this._observer,i=o,t.disconnect(),a=t,void i.forEach(function(t){a.observe(t)}));this.loadAll(o)}},destroy:function(){this._observer&&this._observer.disconnect(),Q(this._settings).forEach(function(t){y(t)}),delete this._observer,delete this._settings,delete this.loadingCount,delete this.toLoadCount},loadAll:function(t){var e=this,n=this._settings;X(t,n).forEach(function(t){b(t,e),V(t,n,e)})},restoreAll:function(){var e=this._settings;Q(e).forEach(function(t){U(t,e)})}},t.load=function(t,e){e=i(e);V(t,e)},t.resetStatus=function(t){r(t)},Z&&function(t,e){if(e)if(e.length)for(var n,a=0;n=e[a];a+=1)o(t,n);else o(t,e)}(t,window.lazyLoadOptions),t});!function(e,t){"use strict";function a(){t.body.classList.add("litespeed_lazyloaded")}function n(){console.log("[LiteSpeed] Start Lazy Load Images"),d=new LazyLoad({elements_selector:"[data-lazyloaded]",callback_finish:a}),o=function(){d.update()},e.MutationObserver&&new MutationObserver(o).observe(t.documentElement,{childList:!0,subtree:!0,attributes:!0})}var d,o;e.addEventListener?e.addEventListener("load",n,!1):e.attachEvent("onload",n)}(window,document);</script><script data-no-optimize="1">var litespeed_vary=document.cookie.replace(/(?:(?:^|.*;\s*)_lscache_vary\s*\=\s*([^;]*).*$)|^.*$/,"");litespeed_vary||fetch("/wp-content/plugins/litespeed-cache/guest.vary.php",{method:"POST",cache:"no-cache",redirect:"follow"}).then(e=>e.json()).then(e=>{console.log(e),e.hasOwnProperty("reload")&&"yes"==e.reload&&(sessionStorage.setItem("litespeed_docref",document.referrer),window.location.reload(!0))});</script><script data-optimized="1" type="litespeed/javascript" data-src="https://kmfinfotech.com/wp-content/litespeed/js/b40edd6ef4bded46e4b15b1cbd63a938.js?ver=2a5bd"></script><script>const litespeed_ui_events=["mouseover","click","keydown","wheel","touchmove","touchstart"];var urlCreator=window.URL||window.webkitURL;function litespeed_load_delayed_js_force(){console.log("[LiteSpeed] Start Load JS Delayed"),litespeed_ui_events.forEach(e=>{window.removeEventListener(e,litespeed_load_delayed_js_force,{passive:!0})}),document.querySelectorAll("iframe[data-litespeed-src]").forEach(e=>{e.setAttribute("src",e.getAttribute("data-litespeed-src"))}),"loading"==document.readyState?window.addEventListener("DOMContentLoaded",litespeed_load_delayed_js):litespeed_load_delayed_js()}litespeed_ui_events.forEach(e=>{window.addEventListener(e,litespeed_load_delayed_js_force,{passive:!0})});async function litespeed_load_delayed_js(){let t=[];for(var d in document.querySelectorAll('script[type="litespeed/javascript"]').forEach(e=>{t.push(e)}),t)await new Promise(e=>litespeed_load_one(t[d],e));document.dispatchEvent(new Event("DOMContentLiteSpeedLoaded")),window.dispatchEvent(new Event("DOMContentLiteSpeedLoaded"))}function litespeed_load_one(t,e){console.log("[LiteSpeed] Load ",t);var d=document.createElement("script");d.addEventListener("load",e),d.addEventListener("error",e),t.getAttributeNames().forEach(e=>{"type"!=e&&d.setAttribute("data-src"==e?"src":e,t.getAttribute(e))});let a=!(d.type="text/javascript");!d.src&&t.textContent&&(d.src=litespeed_inline2src(t.textContent),a=!0),t.after(d),t.remove(),a&&e()}function litespeed_inline2src(t){try{var d=urlCreator.createObjectURL(new Blob([t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1")],{type:"text/javascript"}))}catch(e){d="data:text/javascript;base64,"+btoa(t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1"))}return d}</script></body></html> <!-- Page optimized by LiteSpeed Cache @2023-01-25 17:00:42 --> <!-- Page generated by LiteSpeed Cache 5.3.2 on 2023-01-25 17:00:41 --> <!-- Guest Mode -->