snipt

Ctrl+h for KB shortcuts

Text only

Fuzzy time

    var lang = {
        before: "prije",
        after: "za",
        seconds: ["jednu sekundu", "sekunde", "sekundi"],
        minutes: ["jednu minutu", "minute", "minuta"],
        hours: ["jedan sat", "sata", "sati"],
        days: ["jedan dan", "dana", "dana"],
        months: ["mjesec dana", "mjeseca", "mjeseci"],
        years: ["godinu dana", "godine", "godina"]
    };


    function letsGetFuzzy(date) {
        var diff = new Date().getTime() - new Date(date).getTime();

        var prefix = diff > 0 ? lang.before : lang.after;


        var seconds = Math.abs(diff) / 1000;
        var minutes = seconds / 60;
        var hours = minutes / 60;
        var days = hours / 24;
        var years = days / 365;


        var fuzzyTime = seconds < 45 && getPadez(lang.seconds, Math.round(seconds)) ||
                seconds < 90 && getPadez(lang.minutes, 1) ||
                minutes < 45 && getPadez(lang.minutes, Math.round(minutes)) ||
                minutes < 90 && getPadez(lang.hours, 1) ||
                hours < 24 && getPadez(lang.hours, Math.round(hours)) ||
                hours < 42 && getPadez(lang.days, 1) ||
                days < 30 && getPadez(lang.days, Math.round(days)) ||
                days < 45 && getPadez(lang.months, 1) ||
                days < 365 && getPadez(lang.months, Math.round(days / 30)) ||
                years < 1.5 && getPadez(lang.years, 1) ||
                getPadez(lang.years, Math.round(years));


        alert(prefix + " " + fuzzyTime);
    }


    function getPadez(jedinica, n) {
        if (n === 1) return jedinica[0];

        var n10, string;
        n10 = n % 10;

        if (n10 > 1 && n10 < 5 && (n > 20 || n < 10)) {
            string = jedinica[1];
        } else {
            string = jedinica[2];
        }

        return n + " " + string;
    }
https://snipt.net/embed/cff402ff968d4d8338ba48cafba38339/
/raw/cff402ff968d4d8338ba48cafba38339/
cff402ff968d4d8338ba48cafba38339
text
Text only
56
2019-07-21T10:49:31
True
False
False
Nov 07, 2015 at 07:48 PM
/api/public/snipt/142280/
fuzzy-time
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L-1"> 1</a> <a href="#L-2"> 2</a> <a href="#L-3"> 3</a> <a href="#L-4"> 4</a> <a href="#L-5"> 5</a> <a href="#L-6"> 6</a> <a href="#L-7"> 7</a> <a href="#L-8"> 8</a> <a href="#L-9"> 9</a> <a href="#L-10">10</a> <a href="#L-11">11</a> <a href="#L-12">12</a> <a href="#L-13">13</a> <a href="#L-14">14</a> <a href="#L-15">15</a> <a href="#L-16">16</a> <a href="#L-17">17</a> <a href="#L-18">18</a> <a href="#L-19">19</a> <a href="#L-20">20</a> <a href="#L-21">21</a> <a href="#L-22">22</a> <a href="#L-23">23</a> <a href="#L-24">24</a> <a href="#L-25">25</a> <a href="#L-26">26</a> <a href="#L-27">27</a> <a href="#L-28">28</a> <a href="#L-29">29</a> <a href="#L-30">30</a> <a href="#L-31">31</a> <a href="#L-32">32</a> <a href="#L-33">33</a> <a href="#L-34">34</a> <a href="#L-35">35</a> <a href="#L-36">36</a> <a href="#L-37">37</a> <a href="#L-38">38</a> <a href="#L-39">39</a> <a href="#L-40">40</a> <a href="#L-41">41</a> <a href="#L-42">42</a> <a href="#L-43">43</a> <a href="#L-44">44</a> <a href="#L-45">45</a> <a href="#L-46">46</a> <a href="#L-47">47</a> <a href="#L-48">48</a> <a href="#L-49">49</a> <a href="#L-50">50</a> <a href="#L-51">51</a> <a href="#L-52">52</a> <a href="#L-53">53</a> <a href="#L-54">54</a> <a href="#L-55">55</a> <a href="#L-56">56</a></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span id="L-1"><a name="L-1"></a> var lang = { </span><span id="L-2"><a name="L-2"></a> before: &quot;prije&quot;, </span><span id="L-3"><a name="L-3"></a> after: &quot;za&quot;, </span><span id="L-4"><a name="L-4"></a> seconds: [&quot;jednu sekundu&quot;, &quot;sekunde&quot;, &quot;sekundi&quot;], </span><span id="L-5"><a name="L-5"></a> minutes: [&quot;jednu minutu&quot;, &quot;minute&quot;, &quot;minuta&quot;], </span><span id="L-6"><a name="L-6"></a> hours: [&quot;jedan sat&quot;, &quot;sata&quot;, &quot;sati&quot;], </span><span id="L-7"><a name="L-7"></a> days: [&quot;jedan dan&quot;, &quot;dana&quot;, &quot;dana&quot;], </span><span id="L-8"><a name="L-8"></a> months: [&quot;mjesec dana&quot;, &quot;mjeseca&quot;, &quot;mjeseci&quot;], </span><span id="L-9"><a name="L-9"></a> years: [&quot;godinu dana&quot;, &quot;godine&quot;, &quot;godina&quot;] </span><span id="L-10"><a name="L-10"></a> }; </span><span id="L-11"><a name="L-11"></a> </span><span id="L-12"><a name="L-12"></a> </span><span id="L-13"><a name="L-13"></a> function letsGetFuzzy(date) { </span><span id="L-14"><a name="L-14"></a> var diff = new Date().getTime() - new Date(date).getTime(); </span><span id="L-15"><a name="L-15"></a> </span><span id="L-16"><a name="L-16"></a> var prefix = diff &gt; 0 ? lang.before : lang.after; </span><span id="L-17"><a name="L-17"></a> </span><span id="L-18"><a name="L-18"></a> </span><span id="L-19"><a name="L-19"></a> var seconds = Math.abs(diff) / 1000; </span><span id="L-20"><a name="L-20"></a> var minutes = seconds / 60; </span><span id="L-21"><a name="L-21"></a> var hours = minutes / 60; </span><span id="L-22"><a name="L-22"></a> var days = hours / 24; </span><span id="L-23"><a name="L-23"></a> var years = days / 365; </span><span id="L-24"><a name="L-24"></a> </span><span id="L-25"><a name="L-25"></a> </span><span id="L-26"><a name="L-26"></a> var fuzzyTime = seconds &lt; 45 &amp;&amp; getPadez(lang.seconds, Math.round(seconds)) || </span><span id="L-27"><a name="L-27"></a> seconds &lt; 90 &amp;&amp; getPadez(lang.minutes, 1) || </span><span id="L-28"><a name="L-28"></a> minutes &lt; 45 &amp;&amp; getPadez(lang.minutes, Math.round(minutes)) || </span><span id="L-29"><a name="L-29"></a> minutes &lt; 90 &amp;&amp; getPadez(lang.hours, 1) || </span><span id="L-30"><a name="L-30"></a> hours &lt; 24 &amp;&amp; getPadez(lang.hours, Math.round(hours)) || </span><span id="L-31"><a name="L-31"></a> hours &lt; 42 &amp;&amp; getPadez(lang.days, 1) || </span><span id="L-32"><a name="L-32"></a> days &lt; 30 &amp;&amp; getPadez(lang.days, Math.round(days)) || </span><span id="L-33"><a name="L-33"></a> days &lt; 45 &amp;&amp; getPadez(lang.months, 1) || </span><span id="L-34"><a name="L-34"></a> days &lt; 365 &amp;&amp; getPadez(lang.months, Math.round(days / 30)) || </span><span id="L-35"><a name="L-35"></a> years &lt; 1.5 &amp;&amp; getPadez(lang.years, 1) || </span><span id="L-36"><a name="L-36"></a> getPadez(lang.years, Math.round(years)); </span><span id="L-37"><a name="L-37"></a> </span><span id="L-38"><a name="L-38"></a> </span><span id="L-39"><a name="L-39"></a> alert(prefix + &quot; &quot; + fuzzyTime); </span><span id="L-40"><a name="L-40"></a> } </span><span id="L-41"><a name="L-41"></a> </span><span id="L-42"><a name="L-42"></a> </span><span id="L-43"><a name="L-43"></a> function getPadez(jedinica, n) { </span><span id="L-44"><a name="L-44"></a> if (n === 1) return jedinica[0]; </span><span id="L-45"><a name="L-45"></a> </span><span id="L-46"><a name="L-46"></a> var n10, string; </span><span id="L-47"><a name="L-47"></a> n10 = n % 10; </span><span id="L-48"><a name="L-48"></a> </span><span id="L-49"><a name="L-49"></a> if (n10 &gt; 1 &amp;&amp; n10 &lt; 5 &amp;&amp; (n &gt; 20 || n &lt; 10)) { </span><span id="L-50"><a name="L-50"></a> string = jedinica[1]; </span><span id="L-51"><a name="L-51"></a> } else { </span><span id="L-52"><a name="L-52"></a> string = jedinica[2]; </span><span id="L-53"><a name="L-53"></a> } </span><span id="L-54"><a name="L-54"></a> </span><span id="L-55"><a name="L-55"></a> return n + &quot; &quot; + string; </span><span id="L-56"><a name="L-56"></a> } </span></pre></div> </td></tr></table>
--- 
+++ 
@@ -0,0 +1,56 @@
+    var lang = {
+        before: "prije",
+        after: "za",
+        seconds: ["jednu sekundu", "sekunde", "sekundi"],
+        minutes: ["jednu minutu", "minute", "minuta"],
+        hours: ["jedan sat", "sata", "sati"],
+        days: ["jedan dan", "dana", "dana"],
+        months: ["mjesec dana", "mjeseca", "mjeseci"],
+        years: ["godinu dana", "godine", "godina"]
+    };
+
+
+    function letsGetFuzzy(date) {
+        var diff = new Date().getTime() - new Date(date).getTime();
+
+        var prefix = diff > 0 ? lang.before : lang.after;
+
+
+        var seconds = Math.abs(diff) / 1000;
+        var minutes = seconds / 60;
+        var hours = minutes / 60;
+        var days = hours / 24;
+        var years = days / 365;
+
+
+        var fuzzyTime = seconds < 45 && getPadez(lang.seconds, Math.round(seconds)) ||
+                seconds < 90 && getPadez(lang.minutes, 1) ||
+                minutes < 45 && getPadez(lang.minutes, Math.round(minutes)) ||
+                minutes < 90 && getPadez(lang.hours, 1) ||
+                hours < 24 && getPadez(lang.hours, Math.round(hours)) ||
+                hours < 42 && getPadez(lang.days, 1) ||
+                days < 30 && getPadez(lang.days, Math.round(days)) ||
+                days < 45 && getPadez(lang.months, 1) ||
+                days < 365 && getPadez(lang.months, Math.round(days / 30)) ||
+                years < 1.5 && getPadez(lang.years, 1) ||
+                getPadez(lang.years, Math.round(years));
+
+
+        alert(prefix + " " + fuzzyTime);
+    }
+
+
+    function getPadez(jedinica, n) {
+        if (n === 1) return jedinica[0];
+
+        var n10, string;
+        n10 = n % 10;
+
+        if (n10 > 1 && n10 < 5 && (n > 20 || n < 10)) {
+            string = jedinica[1];
+        } else {
+            string = jedinica[2];
+        }
+
+        return n + " " + string;
+    }