mirror of
				https://github.com/therootcompany/tz.js.git
				synced 2024-11-16 17:29:01 +00:00 
			
		
		
		
	feat: add toLocalISOString()
This commit is contained in:
		
							parent
							
								
									800a1aa3cb
								
							
						
					
					
						commit
						a329d01ae3
					
				@ -8,6 +8,13 @@ in ~100 LoC. For Node.js & Browsers.
 | 
				
			|||||||
XTZ is a poor man's `Temporal` polyfill, but just for time zones. \
 | 
					XTZ is a poor man's `Temporal` polyfill, but just for time zones. \
 | 
				
			||||||
Demo: <https://therootcompany.github.io/tz.js/>
 | 
					Demo: <https://therootcompany.github.io/tz.js/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					// What's the current time, in ISO format?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TZ.toLocalISOString(new Date()); // "2021-11-07T03:15:59.000-0500"
 | 
				
			||||||
 | 
					TZ.timeZone(); // "America/New_York"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> What UTC time will it be when it's 3:15am in New York?
 | 
					> What UTC time will it be when it's 3:15am in New York?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```js
 | 
					```js
 | 
				
			||||||
@ -89,6 +96,7 @@ See <https://therootcompany.github.io/tz.js/>.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# API
 | 
					# API
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- `toLocalISOString(dateOrNull)`
 | 
				
			||||||
- `toTimeZone(utcDate, timeZone)`
 | 
					- `toTimeZone(utcDate, timeZone)`
 | 
				
			||||||
- `toTimeZoneISOString(isoString, timeZone)`
 | 
					- `toTimeZoneISOString(isoString, timeZone)`
 | 
				
			||||||
- `toUTC(dtString, timeZone)`
 | 
					- `toUTC(dtString, timeZone)`
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								index.html
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								index.html
									
									
									
									
									
								
							@ -83,6 +83,18 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <hr />
 | 
					    <hr />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <form class="js-local">
 | 
				
			||||||
 | 
					      <h3>Local ISO+Offset String:</h3>
 | 
				
			||||||
 | 
					      <pre><code>XTZ.toLocalISOString(new Date())</code></pre>
 | 
				
			||||||
 | 
					      <label>
 | 
				
			||||||
 | 
					        ISO:
 | 
				
			||||||
 | 
					        <input class="js-my-dt-local" type="text" disabled />
 | 
				
			||||||
 | 
					      </label>
 | 
				
			||||||
 | 
					      <br />
 | 
				
			||||||
 | 
					    </form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <hr />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <form class="js-tz2utc">
 | 
					    <form class="js-tz2utc">
 | 
				
			||||||
      <h3>Relative TimeZone to Absolute UTC:</h3>
 | 
					      <h3>Relative TimeZone to Absolute UTC:</h3>
 | 
				
			||||||
      <pre><code>XTZ.toUTC("<span class="js-dtx-tz">YYYY-03-14 03:15:69.000</span>", "<span class="js-tzx-tz">UTC</span>")
 | 
					      <pre><code>XTZ.toUTC("<span class="js-dtx-tz">YYYY-03-14 03:15:69.000</span>", "<span class="js-tzx-tz">UTC</span>")
 | 
				
			||||||
@ -179,6 +191,7 @@ Asia/Kolkata        +0530 (No DST) (30-min)</pre
 | 
				
			|||||||
      >github.com/therootcompany/tz.js</a
 | 
					      >github.com/therootcompany/tz.js</a
 | 
				
			||||||
    >
 | 
					    >
 | 
				
			||||||
    <script src="./xtz.js"></script>
 | 
					    <script src="./xtz.js"></script>
 | 
				
			||||||
 | 
					    <script src="./tolocalisostring.js"></script>
 | 
				
			||||||
    <script>
 | 
					    <script>
 | 
				
			||||||
      function $(sel, el) {
 | 
					      function $(sel, el) {
 | 
				
			||||||
        return (el || document.body).querySelector(sel);
 | 
					        return (el || document.body).querySelector(sel);
 | 
				
			||||||
@ -219,6 +232,8 @@ Asia/Kolkata        +0530 (No DST) (30-min)</pre
 | 
				
			|||||||
        $(".js-my-dt-xtz").value = translate(curDt, inTz, outTz).toISOString();
 | 
					        $(".js-my-dt-xtz").value = translate(curDt, inTz, outTz).toISOString();
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $(".js-my-dt-local").value = XTZ.toLocalISOString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      var myTz = new Intl.DateTimeFormat("default", {}).resolvedOptions()
 | 
					      var myTz = new Intl.DateTimeFormat("default", {}).resolvedOptions()
 | 
				
			||||||
        .timeZone;
 | 
					        .timeZone;
 | 
				
			||||||
      $(".js-my-tz").innerText = myTz;
 | 
					      $(".js-my-tz").innerText = myTz;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										50
									
								
								tolocalisostring.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								tolocalisostring.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					(function (exports) {
 | 
				
			||||||
 | 
					  "use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // See <https://github.com/coolaj86/AJScript/issues/27>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function toLocalISOString(dateOrStr) {
 | 
				
			||||||
 | 
					    var d;
 | 
				
			||||||
 | 
					    if (dateOrStr) {
 | 
				
			||||||
 | 
					      d = new Date(dateOrStr);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      d = new Date();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var YYYY = d.getFullYear();
 | 
				
			||||||
 | 
					    var MM = p2(d.getMonth() + 1);
 | 
				
			||||||
 | 
					    var DD = p2(d.getDate());
 | 
				
			||||||
 | 
					    var hh = p2(d.getHours());
 | 
				
			||||||
 | 
					    var mm = p2(d.getMinutes());
 | 
				
			||||||
 | 
					    var ss = p2(d.getSeconds());
 | 
				
			||||||
 | 
					    var sss = d.getMilliseconds().toString().padStart(3, "0");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var offset = formatOffset(-d.getTimezoneOffset());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return `${YYYY}-${MM}-${DD}T${hh}:${mm}:${ss}.${sss}${offset}`;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function formatOffset(minutes) {
 | 
				
			||||||
 | 
					    if (!minutes) {
 | 
				
			||||||
 | 
					      return "Z";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var h = Math.floor(Math.abs(minutes) / 60);
 | 
				
			||||||
 | 
					    var m = Math.abs(minutes) % 60;
 | 
				
			||||||
 | 
					    var offset = "";
 | 
				
			||||||
 | 
					    if (minutes > 0) {
 | 
				
			||||||
 | 
					      offset = "+";
 | 
				
			||||||
 | 
					    } else if (minutes < 0) {
 | 
				
			||||||
 | 
					      offset = "-";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // +0500, -0730
 | 
				
			||||||
 | 
					    return offset + p2(h) + p2(m);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function p2(x) {
 | 
				
			||||||
 | 
					    return String(x).padStart(2, "0");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  exports.toLocalISOString = toLocalISOString;
 | 
				
			||||||
 | 
					})(("undefined" === typeof module && window) || exports);
 | 
				
			||||||
							
								
								
									
										28
									
								
								xtz.js
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								xtz.js
									
									
									
									
									
								
							@ -98,9 +98,7 @@ var XTZ;
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // +0500, -0730
 | 
					    // +0500, -0730
 | 
				
			||||||
    return (
 | 
					    return offset + p2(h) + p2(m);
 | 
				
			||||||
      offset + h.toString().padStart(2, "0") + m.toString().padStart(2, "0")
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function toOffsetISOString(d) {
 | 
					  function toOffsetISOString(d) {
 | 
				
			||||||
@ -155,6 +153,27 @@ var XTZ;
 | 
				
			|||||||
    return toOffsetISOString(whole);
 | 
					    return toOffsetISOString(whole);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function toLocalISOString(dateOrStr) {
 | 
				
			||||||
 | 
					    var d;
 | 
				
			||||||
 | 
					    if (dateOrStr) {
 | 
				
			||||||
 | 
					      d = new Date(dateOrStr);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      d = new Date();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var YYYY = d.getFullYear();
 | 
				
			||||||
 | 
					    var MM = p2(d.getMonth() + 1);
 | 
				
			||||||
 | 
					    var DD = p2(d.getDate());
 | 
				
			||||||
 | 
					    var hh = p2(d.getHours());
 | 
				
			||||||
 | 
					    var mm = p2(d.getMinutes());
 | 
				
			||||||
 | 
					    var ss = p2(d.getSeconds());
 | 
				
			||||||
 | 
					    var sss = d.getMilliseconds().toString().padStart(3, "0");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var offset = formatOffset(-d.getTimezoneOffset());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return `${YYYY}-${MM}-${DD}T${hh}:${mm}:${ss}.${sss}${offset}`;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  XTZ = {
 | 
					  XTZ = {
 | 
				
			||||||
    // bespoke date =>
 | 
					    // bespoke date =>
 | 
				
			||||||
    // 2021-11-07T3:15:59-0500
 | 
					    // 2021-11-07T3:15:59-0500
 | 
				
			||||||
@ -163,6 +182,9 @@ var XTZ;
 | 
				
			|||||||
    // -240 => -0400
 | 
					    // -240 => -0400
 | 
				
			||||||
    formatOffset: formatOffset,
 | 
					    formatOffset: formatOffset,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // new Date() => "2021-11-07T03:15:59-0500"
 | 
				
			||||||
 | 
					    toLocalISOString: toLocalISOString,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // [ "2021-11-07T08:15:59Z", "America/New_York" ]
 | 
					    // [ "2021-11-07T08:15:59Z", "America/New_York" ]
 | 
				
			||||||
    // => "2021-11-07T03:15:59-0500" // 2021-11-07 03:15:59
 | 
					    // => "2021-11-07T03:15:59-0500" // 2021-11-07 03:15:59
 | 
				
			||||||
    toTimeZone: toTimeZone,
 | 
					    toTimeZone: toTimeZone,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user