mirror of
https://github.com/samsonjs/strftime.git
synced 2026-03-25 09:05:48 +00:00
Improve support for v8's Date.toString time zone
This commit is contained in:
parent
5a1db7ba03
commit
dee584fda4
2 changed files with 40 additions and 5 deletions
41
strftime.js
41
strftime.js
|
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
var Locales = {
|
var Locales = {
|
||||||
de_DE: {
|
de_DE: {
|
||||||
|
identifier: 'de-DE',
|
||||||
days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
|
days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
|
||||||
shortDays: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
|
shortDays: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
|
||||||
months: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
|
months: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
|
||||||
|
|
@ -35,6 +36,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
en_CA: {
|
en_CA: {
|
||||||
|
identifier: 'en-CA',
|
||||||
days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
|
days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
|
||||||
shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
||||||
months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
||||||
|
|
@ -63,6 +65,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
en_US: {
|
en_US: {
|
||||||
|
identifier: 'en-US',
|
||||||
days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
|
days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
|
||||||
shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
||||||
months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
||||||
|
|
@ -91,6 +94,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
es_MX: {
|
es_MX: {
|
||||||
|
identifier: 'es-MX',
|
||||||
days: ['domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'],
|
days: ['domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'],
|
||||||
shortDays: ['dom', 'lun', 'mar', 'mié', 'jue', 'vie', 'sáb'],
|
shortDays: ['dom', 'lun', 'mar', 'mié', 'jue', 'vie', 'sáb'],
|
||||||
months: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre',' diciembre'],
|
months: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre',' diciembre'],
|
||||||
|
|
@ -113,6 +117,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
fr_FR: {
|
fr_FR: {
|
||||||
|
identifier: 'fr-FR',
|
||||||
days: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
|
days: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
|
||||||
shortDays: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
|
shortDays: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
|
||||||
months: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
|
months: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
|
||||||
|
|
@ -135,6 +140,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
it_IT: {
|
it_IT: {
|
||||||
|
identifier: 'it-IT',
|
||||||
days: ['domenica', 'lunedì', 'martedì', 'mercoledì', 'giovedì', 'venerdì', 'sabato'],
|
days: ['domenica', 'lunedì', 'martedì', 'mercoledì', 'giovedì', 'venerdì', 'sabato'],
|
||||||
shortDays: ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'],
|
shortDays: ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'],
|
||||||
months: ['gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno', 'luglio', 'agosto', 'settembre', 'ottobre', 'novembre', 'dicembre'],
|
months: ['gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno', 'luglio', 'agosto', 'settembre', 'ottobre', 'novembre', 'dicembre'],
|
||||||
|
|
@ -157,6 +163,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
nl_NL: {
|
nl_NL: {
|
||||||
|
identifier: 'nl-NL',
|
||||||
days: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
|
days: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
|
||||||
shortDays: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
|
shortDays: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
|
||||||
months: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
|
months: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
|
||||||
|
|
@ -179,6 +186,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
pt_BR: {
|
pt_BR: {
|
||||||
|
identifier: 'pt-BR',
|
||||||
days: ['domingo', 'segunda', 'terça', 'quarta', 'quinta', 'sexta', 'sábado'],
|
days: ['domingo', 'segunda', 'terça', 'quarta', 'quinta', 'sexta', 'sábado'],
|
||||||
shortDays: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],
|
shortDays: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],
|
||||||
months: ['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro'],
|
months: ['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro'],
|
||||||
|
|
@ -201,6 +209,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
ru_RU: {
|
ru_RU: {
|
||||||
|
identifier: 'ru-RU',
|
||||||
days: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],
|
days: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],
|
||||||
shortDays: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
|
shortDays: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
|
||||||
months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
|
months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
|
||||||
|
|
@ -223,6 +232,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
tr_TR: {
|
tr_TR: {
|
||||||
|
identifier: 'tr-TR',
|
||||||
days: ['Pazar', 'Pazartesi', 'Salı','Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi'],
|
days: ['Pazar', 'Pazartesi', 'Salı','Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi'],
|
||||||
shortDays: ['Paz', 'Pzt', 'Sal', 'Çrş', 'Prş', 'Cum', 'Cts'],
|
shortDays: ['Paz', 'Pzt', 'Sal', 'Çrş', 'Prş', 'Cum', 'Cts'],
|
||||||
months: ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'],
|
months: ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'],
|
||||||
|
|
@ -247,6 +257,7 @@
|
||||||
// By michaeljayt<michaeljayt@gmail.com>
|
// By michaeljayt<michaeljayt@gmail.com>
|
||||||
// https://github.com/michaeljayt/strftime/commit/bcb4c12743811d51e568175aa7bff3fd2a77cef3
|
// https://github.com/michaeljayt/strftime/commit/bcb4c12743811d51e568175aa7bff3fd2a77cef3
|
||||||
zh_CN: {
|
zh_CN: {
|
||||||
|
identifier: 'zh-CN',
|
||||||
days: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
|
days: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
|
||||||
shortDays: ['日', '一', '二', '三', '四', '五', '六'],
|
shortDays: ['日', '一', '二', '三', '四', '五', '六'],
|
||||||
months: ['一月份', '二月份', '三月份', '四月份', '五月份', '六月份', '七月份', '八月份', '九月份', '十月份', '十一月份', '十二月份'],
|
months: ['一月份', '二月份', '三月份', '四月份', '五月份', '六月份', '七月份', '八月份', '九月份', '十月份', '十一月份', '十二月份'],
|
||||||
|
|
@ -499,9 +510,8 @@
|
||||||
resultString += "GMT";
|
resultString += "GMT";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// fixme optimize
|
var tzName = getTimezoneName(date);
|
||||||
var tzString = date.toString().match(/\(([\w\s]+)\)/);
|
resultString += tzName || '';
|
||||||
resultString += tzString && tzString[1] || '';
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -809,6 +819,31 @@
|
||||||
return (date.getTimezoneOffset() || 0) * 60000;
|
return (date.getTimezoneOffset() || 0) * 60000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tries to get a short timezone name using Date.toLocaleString, falling back on the platform default
|
||||||
|
// using Date.toString if necessary.
|
||||||
|
function getTimezoneName(date, localeIdentifier) {
|
||||||
|
return getShortTimezoneName(date, localeIdentifier) || getDefaultTimezoneName(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unfortunately this returns GMT+2 when running with `TZ=Europe/Amsterdam node test.js` so it's not
|
||||||
|
// perfect.
|
||||||
|
function getShortTimezoneName(date, localeIdentifier) {
|
||||||
|
if (localeIdentifier == null) return null;
|
||||||
|
|
||||||
|
var tzString = date
|
||||||
|
.toLocaleString(localeIdentifier, { timeZoneName: 'short' })
|
||||||
|
.match(/\s([\w]+)$/);
|
||||||
|
return tzString && tzString[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// This varies by platform so it's not an ideal way to get the time zone name. On most platforms it's
|
||||||
|
// a short name but in Node v10+ and Chrome 66+ it's a long name now. Prefer getShortTimezoneName(date)
|
||||||
|
// where possible.
|
||||||
|
function getDefaultTimezoneName(date) {
|
||||||
|
var tzString = date.toString().match(/\(([\w\s]+)\)/);
|
||||||
|
return tzString && tzString[1];
|
||||||
|
}
|
||||||
|
|
||||||
function warn(message) {
|
function warn(message) {
|
||||||
if (typeof console !== 'undefined' && typeof console.warn == 'function') {
|
if (typeof console !== 'undefined' && typeof console.warn == 'function') {
|
||||||
console.warn(message)
|
console.warn(message)
|
||||||
|
|
|
||||||
4
test.js
4
test.js
|
|
@ -38,7 +38,7 @@ if (process.env.TZ == 'America/Vancouver') {
|
||||||
testTimezone('America/Vancouver');
|
testTimezone('America/Vancouver');
|
||||||
assert.format('%C', '01', '01', new Date(100, 0, 1));
|
assert.format('%C', '01', '01', new Date(100, 0, 1));
|
||||||
assert.format('%X', '11:51:45 AM', '06:51:45 PM');
|
assert.format('%X', '11:51:45 AM', '06:51:45 PM');
|
||||||
assert.format('%c', 'Tue 07 Jun 2011 11:51:45 AM PDT', 'Tue 07 Jun 2011 06:51:45 PM GMT');
|
assert.format('%c', 'Tue 07 Jun 2011 11:51:45 AM Pacific Daylight Time', 'Tue 07 Jun 2011 06:51:45 PM GMT');
|
||||||
assert.format('%j', '097', '098', new Date(1365390736236));
|
assert.format('%j', '097', '098', new Date(1365390736236));
|
||||||
assert.format('%x', '06/07/11');
|
assert.format('%x', '06/07/11');
|
||||||
assert.format('%U', '12', null, new Date('2017-03-25 00:00:00 +0000'));
|
assert.format('%U', '12', null, new Date('2017-03-25 00:00:00 +0000'));
|
||||||
|
|
@ -57,7 +57,7 @@ else if (process.env.TZ == 'Europe/Amsterdam') {
|
||||||
testTimezone('Europe/Amsterdam');
|
testTimezone('Europe/Amsterdam');
|
||||||
assert.format('%C', '01', '00', new Date(100, 0, 1));
|
assert.format('%C', '01', '00', new Date(100, 0, 1));
|
||||||
assert.format('%X', '08:51:45 PM', '06:51:45 PM');
|
assert.format('%X', '08:51:45 PM', '06:51:45 PM');
|
||||||
assert.format('%c', 'Tue 07 Jun 2011 08:51:45 PM CEST', 'Tue 07 Jun 2011 06:51:45 PM GMT');
|
assert.format('%c', 'Tue 07 Jun 2011 08:51:45 PM Central European Summer Time', 'Tue 07 Jun 2011 06:51:45 PM GMT');
|
||||||
assert.format('%j', '098', '098', new Date(1365390736236));
|
assert.format('%j', '098', '098', new Date(1365390736236));
|
||||||
assert.format('%x', '06/07/11');
|
assert.format('%x', '06/07/11');
|
||||||
assert.format('%U', '12', null, new Date('2017-03-25 00:00:00 +0000'));
|
assert.format('%U', '12', null, new Date('2017-03-25 00:00:00 +0000'));
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue