根据toLocaleTimeString()将12小时hh:mm AM / PM转换为24小时hh:mm

时间:2020-09-09 16:40:13

标签: javascript datetime localization

我的网站/数据库上有一些开放时间信息,格式为hh:mm AM / PM,如果用户浏览器的语言设置偏爱该格式而不是AM /,我希望将其转换为24小时hh:mm。 PM格式。

我听说使用Javascript的 .toLocaleTimeString()是可能的。 谁可以帮我一个功能?

例如,

var time = '11:30am to 3pm, 5 to 9pm';

希望获得输出/将其重写为

var time = '11:30 to 15:00, 17:00 to 21:00';

2 个答案:

答案 0 :(得分:1)

function timeToLocale(hours, minutes, locale=[]) {
  var time = new Date();
  time.setHours(hours, minutes);
  return time.toLocaleTimeString(locale,{timeStyle: 'short'});
}

var time;

time = timeToLocale(11,30)+" to "+
       timeToLocale(15, 0)+", "  +
       timeToLocale(17, 0)+" to "+
       timeToLocale(21, 0);
console.log(time);

time = timeToLocale(11,30,"en-US")+" to "+
       timeToLocale(15, 0,"en-US")+", "  +
       timeToLocale(17, 0,"en-US")+" to "+
       timeToLocale(21, 0,"en-US");
console.log(time);

time = timeToLocale(11,30,"en-IL")+" to "+
       timeToLocale(15, 0,"en-IL")+", "  +
       timeToLocale(17, 0,"en-IL")+" to "+
       timeToLocale(21, 0,"en-IL");
console.log(time);

不指定locale-出于演示目的,它位于摘要中=使用第一个设置time的格式=不使用locale
请以24小时格式和分钟来指定时间。


我在以色列,但浏览器使用“ en-US”,因此这是一种强制其使用“ en-IL”的“方式”:
我用了一个国家/地区的名字的第一个单词,似乎还可以。
我在Windows 10上使用Chrome-可能需要针对跨平台和/或跨浏览器进行调整。
此外,它假设用户的语言是英语。
嘘!

var codeByCountry={"Afghanistan":"AF","Aland":"AX","Albania":"AL","Algeria":"DZ","American":"AS","Andorra":"AD","Angola":"AO","Anguilla":"AI","Antarctica":"AQ","Antigua":"AG","Argentina":"AR","Armenia":"AM","Aruba":"AW","Australia":"AU","Austria":"AT","Azerbaijan":"AZ","Bahamas":"BS","Bahrain":"BH","Bangladesh":"BD","Barbados":"BB","Belarus":"BY","Belgium":"BE","Belize":"BZ","Benin":"BJ","Bermuda":"BM","Bhutan":"BT","Bolivia":"BO","Bosnia":"BA","Botswana":"BW","Bouvet":"BV","Brazil":"BR","British":"IO","Brunei":"BN","Bulgaria":"BG","Burkina":"BF","Burundi":"BI","Cambodia":"KH","Cameroon":"CM","Canada":"CA","Cape":"CV","Cayman":"KY","Central":"CF","Chad":"TD","Chile":"CL","China":"CN","Christmas":"CX","Cocos":"CC","Colombia":"CO","Comoros":"KM","Congo":"CG","Congo,":"CD","Cook":"CK","Costa":"CR","Cote":"CI","Croatia":"HR","Cuba":"CU","Cyprus":"CY","Czech":"CZ","Denmark":"DK","Djibouti":"DJ","Dominica":"DM","Dominican":"DO","Ecuador":"EC","Egypt":"EG","El":"SV","Equatorial":"GQ","Eritrea":"ER","Estonia":"EE","Ethiopia":"ET","Falkland":"FK","Faroe":"FO","Fiji":"FJ","Finland":"FI","France":"FR","French":"TF","Gabon":"GA","Gambia":"GM","Georgia":"GE","Germany":"DE","Ghana":"GH","Gibraltar":"GI","Greece":"GR","Greenland":"GL","Grenada":"GD","Guadeloupe":"GP","Guam":"GU","Guatemala":"GT","Guernsey":"GG","Guinea":"GN","Guinea-Bissau":"GW","Guyana":"GY","Haiti":"HT","Heard":"HM","Holy":"VA","Honduras":"HN","Hong":"HK","Hungary":"HU","Iceland":"IS","India":"IN","Indonesia":"ID","Iran,":"IR","Iraq":"IQ","Ireland":"IE","Isle":"IM","Israel":"IL","Italy":"IT","Jamaica":"JM","Japan":"JP","Jersey":"JE","Jordan":"JO","Kazakhstan":"KZ","Kenya":"KE","Kiribati":"KI","Korea":"KR","Kuwait":"KW","Kyrgyzstan":"KG","Lao":"LA","Latvia":"LV","Lebanon":"LB","Lesotho":"LS","Liberia":"LR","Libyan":"LY","Liechtenstein":"LI","Lithuania":"LT","Luxembourg":"LU","Macao":"MO","Macedonia":"MK","Madagascar":"MG","Malawi":"MW","Malaysia":"MY","Maldives":"MV","Mali":"ML","Malta":"MT","Marshall":"MH","Martinique":"MQ","Mauritania":"MR","Mauritius":"MU","Mayotte":"YT","Mexico":"MX","Micronesia,":"FM","Moldova":"MD","Monaco":"MC","Mongolia":"MN","Montenegro":"ME","Montserrat":"MS","Morocco":"MA","Mozambique":"MZ","Myanmar":"MM","Namibia":"NA","Nauru":"NR","Nepal":"NP","Netherlands":"AN","New":"NZ","Nicaragua":"NI","Niger":"NE","Nigeria":"NG","Niue":"NU","Norfolk":"NF","Northern":"MP","Norway":"NO","Oman":"OM","Pakistan":"PK","Palau":"PW","Palestinian":"PS","Panama":"PA","Papua":"PG","Paraguay":"PY","Peru":"PE","Philippines":"PH","Pitcairn":"PN","Poland":"PL","Portugal":"PT","Puerto":"PR","Qatar":"QA","Reunion":"RE","Romania":"RO","Russian":"RU","Rwanda":"RW","Saint":"VC","Samoa":"WS","San":"SM","Sao":"ST","Saudi":"SA","Senegal":"SN","Serbia":"RS","Seychelles":"SC","Sierra":"SL","Singapore":"SG","Slovakia":"SK","Slovenia":"SI","Solomon":"SB","Somalia":"SO","South":"GS","Spain":"ES","Sri":"LK","Sudan":"SD","Suriname":"SR","Svalbard":"SJ","Swaziland":"SZ","Sweden":"SE","Switzerland":"CH","Syrian":"SY","Taiwan":"TW","Tajikistan":"TJ","Tanzania":"TZ","Thailand":"TH","Timor-Leste":"TL","Togo":"TG","Tokelau":"TK","Tonga":"TO","Trinidad":"TT","Tunisia":"TN","Turkey":"TR","Turkmenistan":"TM","Turks":"TC","Tuvalu":"TV","Uganda":"UG","Ukraine":"UA","United":"UM","Uruguay":"UY","Uzbekistan":"UZ","Vanuatu":"VU","Venezuela":"VE","Viet":"VN","Virgin":"VI","Wallis":"WF","Western":"EH","Yemen":"YE","Zambia":"ZM","Zimbabwe":"ZW"};

var language=navigator.language.split("-")[0];
var country=(new Date).toString().split("(")[1].split(" ")[0];
var code=codeByCountry[country];
var languageAndCode=language+"-"+code;

function timeToLocale(hours, minutes, locale) {
  if(locale==undefined) locale=languageAndCode;
  var time = new Date();
  time.setHours(hours, minutes);
  return time.toLocaleTimeString(locale,{timeStyle: 'short'});
}

var time;

time = timeToLocale(11,30)+" to "+
       timeToLocale(15, 0)+", "  +
       timeToLocale(17, 0)+" to "+
       timeToLocale(21, 0);
console.log(time);

time = timeToLocale(11,30,"en-US")+" to "+
       timeToLocale(15, 0,"en-US")+", "  +
       timeToLocale(17, 0,"en-US")+" to "+
       timeToLocale(21, 0,"en-US");
console.log(time);

time = timeToLocale(11,30,"en-IL")+" to "+
       timeToLocale(15, 0,"en-IL")+", "  +
       timeToLocale(17, 0,"en-IL")+" to "+
       timeToLocale(21, 0,"en-IL");
console.log(time);

答案 1 :(得分:1)

您可以创建一个Date,将其设置为时间,然后使用 Date.prototype.toLocaleString 以及默认语言和适当的时间选项。这将根据浏览器语言设置来格式化时间,但是也可能不是用户喜欢或期望的格式。

如果时间以24小时格式传递给函数,则更为简单。

下面的代码创建一个日期为2000年1月1日(可以是任何日期),并使用UTC来确保它避免了夏时制转换时间,因为这可能会导致创建两次或根本不发生的时间,从而导致意外结果。

语言将设置小时周期以及12小时还是24小时。请注意,在某些情况下,浏览器会把它弄错,例如Javascript Intl.DateTimeFormat hours12 gives odd output on Chrome

/**
 * Return time string based on browser default language
 *
 * @param {number} hr: hour of time in 24 hour format
 * @param {number} min: minute of time
 * @returns {string} time formatted for browser default language
 */
function timeAsBrowserDefaultLanguage(hr, min) {
  let d = new Date(Date.UTC(2000,0,1,hr,min));
  return d.toLocaleString('default',{
    hour: 'numeric',
    minute: 'numeric',
    timeZone: 'UTC'
  });
}

console.log(timeAsBrowserDefaultLanguage(20,15));