Skip to content

Instantly share code, notes, and snippets.

@think49
Last active September 13, 2017 08:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save think49/910b913051cc94e765f1bc347d5089db to your computer and use it in GitHub Desktop.
Save think49/910b913051cc94e765f1bc347d5089db to your computer and use it in GitHub Desktop.
toISOLocalString(): 現在のロケールに対応した「ISO 8601 拡張形式」の日付文字列を返します

to-iso-local-string.js

概要

現在のロケールに対応したISO 8601 拡張形式の日付文字列を返します。 現在のロケールが UTC (協定世界時) であるなら、Date.prototype.toISOString() と同じ文字列を返します。

使い方

toISOLocalString (date)

第一引数で指定された date オブジェクトを元に現在のロケールで ISO 8601 拡張形式の文字列を返します。

console.log(toISOLocalString(new Date(600, 1,2,3,4,5,6)));  // "0600-02-02T03:04:05.006+09:00"
console.log(toISOLocalString(new Date(2000, 1,2,3,4,5,6))); // "2000-02-02T03:04:05.006+09:00"

第一引数が date オブジェクトではなかった場合、TypeError を返します。

toISOLocalString(null); // TypeError: this is not a Date object.

参考リンク

<!DOCTYPE html>
<head>
<title>test</title>
<style>
</style>
</head>
<body>
<script src="to-iso-local-string-1.0.0.js"></script>
<script>
'use strict';
console.assert(toISOLocalString(new Date(600, 1,2,3,4,5,6)) === '0600-02-02T03:04:05.006+09:00');
console.assert(toISOLocalString(new Date(2000, 1,2,3,4,5,6)) === '2000-02-02T03:04:05.006+09:00');
</script>
<script>
'use strict';
String.prototype.padStart = null;
toISOLocalString(null); // TypeError: this is not a Date object.
</script>
<script src="to-iso-local-string-1.0.0.js"></script>
<script>
'use strict';
console.assert(toISOLocalString(new Date(600, 1,2,3,4,5,6)) === '0600-02-02T03:04:05.006+09:00');
console.assert(toISOLocalString(new Date(2000, 1,2,3,4,5,6)) === '2000-02-02T03:04:05.006+09:00');
</script>
</body>
</html>
/**
* to-iso-local-string-1.0.0.js
* Convert Date object to ISO 8601 Local String.
*
* @version 1.0.0
* @author think49
* @url https://gist.github.com/think49/910b913051cc94e765f1bc347d5089db
* @license http://www.opensource.org/licenses/mit-license.php (The MIT License)
*/
'use strict';
var toISOLocalString = (function (toString, TypeError, padStart) {
padStart = typeof padStart === 'function' ? Function.prototype.call.bind(padStart) : (function (String, Array) {
var toLength = (function (Number, floor, abs, min) {
return function toLength (length) {
length = Number(length);
if (length !== length) {
return 0;
}
length = floor(abs(length));
if (length <= 0) {
return 0;
}
return min(length, 9007199254740991);
};
}(Number, Math.floor, Math.abs, Math.min));
return function padStart (string, maxLength /* [, fillString] */) {
var diffLength, fillString, fillLength, remainder;
if (string === null || typeof string === 'undefined') {
throw new TypeError('String.prototype.padStart called on null or undefined');
}
string = String(string);
diffLength = toLength(maxLength) - string.length;
if (diffLength < 1) {
return string;
}
fillString = arguments[2];
fillString = typeof fillString === 'undefined' ? ' ' : String(fillString);
if (!fillString) { // If fillString is the empty String
return string;
}
fillLength = fillString.length;
remainder = diffLength % fillLength;
return Array((diffLength - remainder) / fillLength + 1).join(fillString) + fillString.slice(0, remainder) + string;
};
}(String, Array));
function toTimezoneString (date) {
var offset = date.getTimezoneOffset(), sign, minutes;
if (offset === 0) {
return 'Z';
}
sign = offset < 0 ? (offset *= -1, '+') : '-';
minutes = offset % 60;
return sign + padStart((offset - minutes) / 60, 2, 0) + ':' + padStart(minutes, 2, 0);
}
return function toISOLocalString (date) {
if (toString.call(date) !== '[object Date]') {
throw new TypeError('this is not a Date object.');
}
return padStart(date.getFullYear(), 4, 0) + '-' + padStart(date.getMonth() + 1, 2, 0) + '-' + padStart(date.getDate(), 2, 0) + 'T' + padStart(date.getHours(), 2, 0) + ':' + padStart(date.getMinutes(), 2, 0) + ':' + padStart(date.getSeconds(), 2, 0) + '.' + padStart(date.getMilliseconds(), 3, 0) + toTimezoneString(date);
};
}(Object.prototype.toString, TypeError, String.prototype.padStart));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment