Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取用户时区的完整时间和日期_Javascript - Fatal编程技术网

Javascript 如何获取用户时区的完整时间和日期

Javascript 如何获取用户时区的完整时间和日期,javascript,Javascript,我正在尝试使用vanilla Javascript显示日期和时间。我想显示用户时区的完整日期和时间 这是我想要的输出: Wednesday, January 30th 2019 at 08:48:47 AM PST 以下是我目前掌握的情况: var日期=新日期; var n=date.toDateString; 变量时间=date.toLocaleTimeString; document.getElementById'time'。innerHTML=n+'at'+time; 香草JS-没问题

我正在尝试使用vanilla Javascript显示日期和时间。我想显示用户时区的完整日期和时间

这是我想要的输出:

Wednesday, January 30th 2019 at 08:48:47 AM PST
以下是我目前掌握的情况:

var日期=新日期; var n=date.toDateString; 变量时间=date.toLocaleTimeString; document.getElementById'time'。innerHTML=n+'at'+time;
香草JS-没问题!救命啊!从

var日期=新日期, 语言环境='en US', 时区='美国/洛杉矶'; var weekday=new Intl.DateTimeFormatlocale,{weekday:'long',timeZone}.formatdate; var month=new Intl.DateTimeFormatlocale,{month:'long',timeZone}.formatdate; var day=new Intl.DateTimeFormatlocale,{day:'2位',timeZone}.formatdate; var time=新的Intl.DateTimeFormatlocale, { 小时:“2位”, 分钟:“两位数”, 第二个:“2位”, 小时12:是的, 时区 }.形成日期;
console.log`${weekday},${month}${day}${th${date.getFullYear}位于${time}` 香草JS-没问题!救命啊!从

var日期=新日期, 语言环境='en US', 时区='美国/洛杉矶'; var weekday=new Intl.DateTimeFormatlocale,{weekday:'long',timeZone}.formatdate; var month=new Intl.DateTimeFormatlocale,{month:'long',timeZone}.formatdate; var day=new Intl.DateTimeFormatlocale,{day:'2位',timeZone}.formatdate; var time=新的Intl.DateTimeFormatlocale, { 小时:“2位”, 分钟:“两位数”, 第二个:“2位”, 小时12:是的, 时区 }.形成日期; console.log`${weekday},${month}${day}${th${date.getFullYear}位于${time}`; 要向其中添加时区,可以使用javascript方法获取时区偏移量。根据这一点,你可以决定时区

要向其中添加时区,可以使用javascript方法获取时区偏移量。根据这一点,你可以决定时区

此解决方案使用Intl.DateTimeFormat,以便我们可以利用FormatToParts函数,然后应用自定义映射,最后使用reduce以获得所需的输出

在map函数中,我们将日期后缀附加到输出“st”、“nd”、“rd”和“th”中。例如,第一、第二、第三、第四。后缀被附加到日期本身,而不是相应的文本键,因为我们需要知道日期的值,所以这是最简单的方法

在替换文本值的地方,默认情况下主要是删除多余的逗号,并在时间之前显示

MDN上的参考资料:

-我们使用undefined来使用用户的默认值 const d=新日期; 常量格式选项={ 工作日:'长'、月:'长'、日:'数字'、小时:'数字', 分钟:“数字”,年:“数字”,时区名称:“短”,小时12:true }; //使用Intl.DateTimeFormat以便我们能够访问 //生成的formatToParts函数 //包含部分格式化日期的对象数组 const dateFormat=new Intl.dateTimeFormatDefined,formatOptions; //跟踪'literal'键计数'literal'是分隔符 设分离器指数=0; //使用map和reduce实现魔法的地方 const dateString=dateFormat.formatToPartsd.map{type,value}=>{ 开关类型{ 大小写“literal”: separatorIndex++; 开关分离器索引{ 案例3://日分隔符 返回“”; 打破 案例4://年份分隔符 返回“at”; 默认值:返回值; } 打破 案件日期: //附加适当的后缀 开关量{ case value.slice-1===1: 返回值。concat'st'; 打破 case value.slice-1==2: 返回值。concat'nd'; 打破 case value.slice-1==3: 返回值。concat'rd'; 打破 默认值:返回值.concat'th'; } 打破 案件‘小时’: //小于10点钟时预编0 返回值<10?'0'。concatvalue:值; 打破 默认值:返回值; } }.reducestring,部分=>{ 返回字符串.concatpart }; //不是答案的一部分;仅用于输出结果 document.writedateString 此解决方案使用Intl.DateTimeFormat,以便我们可以利用FormatToParts函数,然后应用自定义映射,最后使用reduce来获得所需的输出

在map函数中,我们将日期后缀附加到输出“st”、“nd”、“rd”和“th”中。例如,第一、第二、第三、第四。后缀被附加到日期本身,而不是相应的文本键,因为我们需要知道日期的值,所以这是最简单的方法

在替换文本值的地方,默认情况下主要是删除多余的逗号,并在时间之前显示

MDN上的参考资料:

-我们使用undefined来使用用户的默认值 常数d=ne w日期; 常量格式选项={ 工作日:'长'、月:'长'、日:'数字'、小时:'数字', 分钟:“数字”,年:“数字”,时区名称:“短”,小时12:true }; //使用Intl.DateTimeFormat以便我们能够访问 //生成的formatToParts函数 //包含部分格式化日期的对象数组 const dateFormat=new Intl.dateTimeFormatDefined,formatOptions; //跟踪'literal'键计数'literal'是分隔符 设分离器指数=0; //使用map和reduce实现魔法的地方 const dateString=dateFormat.formatToPartsd.map{type,value}=>{ 开关类型{ 大小写“literal”: separatorIndex++; 开关分离器索引{ 案例3://日分隔符 返回“”; 打破 案例4://年份分隔符 返回“at”; 默认值:返回值; } 打破 案件日期: //附加适当的后缀 开关量{ case value.slice-1===1: 返回值。concat'st'; 打破 case value.slice-1==2: 返回值。concat'nd'; 打破 case value.slice-1==3: 返回值。concat'rd'; 打破 默认值:返回值.concat'th'; } 打破 案件‘小时’: //小于10点钟时预编0 返回值<10?'0'。concatvalue:值; 打破 默认值:返回值; } }.reducestring,部分=>{ 返回字符串.concatpart }; //不是答案的一部分;仅用于输出结果
document.writedateString;时区的可能副本应该是时区,我建议将区域设置保留为未定义。并非所有人都生活在美国;这仍然不是OP想要的格式:2019年1月30日星期三上午8:48:47太平洋标准时间,我不知道这存在。真的很酷!我可以使用Intl.DateTimeFormat.resolvedOptions.Timezone获得时区名称。它的格式不太符合我的要求,它的名称是America/Chicago,而不是CST,但我会接受这个答案并继续研究它。时区应该是时区,我建议保留未定义的区域设置。并非所有人都生活在美国;这仍然不是OP想要的格式:2019年1月30日星期三上午8:48:47太平洋标准时间,我不知道这存在。真的很酷!我可以使用Intl.DateTimeFormat.resolvedOptions.Timezone来获取时区名称。它的格式不太符合我的要求,它说的是America/Chicago而不是CST,但我会接受这个答案并继续研究它。
var date = new Date();
var n = date.toDateString();
var time = date.toLocaleTimeString();
var hours = date.getHours();
var AP = hours >= 12 ? 'PM' : 'AM';

var day = date.getDay();
var weekday = "";
if(day === 0)weekday = "Monday"; else if(day === 1) weekday = "Tuesday" ; 
else if(day === 2) weekday = "Wednesday";  else if(day === 3) weekday = "Thursday";
else if(day === 4) weekday = "Friday"; else if(day === 5) weekday = "Saturday";
else if(day === 6) weekday = "Sunday";

var monthNo = date.getMonth();
var month = "";
if(monthNo === 0)month = "January";
else if(monthNo === 1)month = "February";
else if(monthNo === 2)month = "March";
else if(monthNo === 3)month = "April";
else if(monthNo === 4)month = "May";
else if(monthNo === 5)month = "June";
else if(monthNo === 6)month = "July";
else if(monthNo === 7)month = "August";
else if(monthNo === 8)month = "September";
else if(monthNo === 9)month = "October";
else if(monthNo === 10)month = "November";
else if(monthNo === 11)month = "December";

var dateNo = date.getDate();
var dateletter = "";

if (dateNo > 3 && dateNo < 21) dateletter =  "th"; 
else if(dateNo % 10 === 1) dateletter =  "st"; 
else if(dateNo % 10 === 2) dateletter =  "nd"; 
else if(dateNo % 10 === 3) dateletter =  "rd"; 
else dateletter = "th";


console.log(weekday +", " + month + " " + dateNo + dateletter + " at " + time + " " + 
" " +AP);`