Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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 &引用;getDate不是一个函数";添加时区后_Javascript_Jquery_Date_Timezone - Fatal编程技术网

Javascript &引用;getDate不是一个函数";添加时区后

Javascript &引用;getDate不是一个函数";添加时区后,javascript,jquery,date,timezone,Javascript,Jquery,Date,Timezone,我正在显示一个实时日期和时间,但得到的错误是getDate不是一个函数 我得到这个错误是因为我添加了这样的时区 var x = new Date().toLocaleString("en-US", {timeZone: "America/New_York"}); 你能帮我解决这个问题吗? 函数计算时间(){ var refresh=1000;//刷新率(毫秒) mytime=setTimeout('currentUSATime()',刷新) } 函数currentUSATime(){ var

我正在显示一个实时日期和时间,但得到的错误是
getDate不是一个函数

我得到这个错误是因为我添加了这样的时区

var x = new Date().toLocaleString("en-US", {timeZone: "America/New_York"});
你能帮我解决这个问题吗?
函数计算时间(){
var refresh=1000;//刷新率(毫秒)
mytime=setTimeout('currentUSATime()',刷新)
}
函数currentUSATime(){
var x=新日期().toLocaleString(“en US”{
时区:“美国/纽约”
});
var date=x.getDate();
var month=x.getMonth();//小心!一月是0而不是1
var year=x.getFullYear();
document.getElementById('ct').innerHTML=日期;
计算时间();
}

toLocaleString
将返回一个
字符串
。您可以再次将其传递给日期构造函数,以获取
date
的实例。据

toLocaleString()
方法返回一个字符串,该字符串包含此日期的语言敏感表示形式

var-days=[‘星期日’、‘星期一’、‘星期二’、‘星期三’、‘星期四’、‘星期五’、‘星期六’];
函数计算时间(){
var refresh=1000;//刷新率(毫秒)
mytime=setTimeout('currentUSATime()',刷新)
}
函数currentUSATime(){
让str=new Date().toLocaleString(“en US”{
时区:“美国/纽约”
})
var x=新日期(str);
var date=x.getDate();
var month=x.getMonth();//小心!一月是0而不是1
var year=x.getFullYear();
document.getElementById('ct').innerHTML=days[x.getDay()]+''+x.toLocaleString();
计算时间();
}

如其他人所述,
toLocaleString
返回一个
字符串
,因此不能将其视为
日期
对象。由于您似乎无论如何都希望将其显示为字符串,因此正确的方法是简单地传递以所需格式获取字符串所需的所有参数

例如:

var s = new Date().toLocaleString(undefined, { 
    timeZone: 'America/New_York',
    weekday: 'long',
    year: 'numeric',
    month: 'numeric',
    day: 'numeric',
    hour: 'numeric',
    minute: 'numeric',
    second: 'numeric'
})
这将给出
美国/纽约
(美国东部时间)中的当前时间,使用用户的区域设置进行格式化(
未定义的
默认为用户的区域设置),并指定应给出工作日的全名以及日期和时间的数字格式

示例输出取决于用户的区域设置:

en-US    "Thursday, 4/11/2019, 1:13:14 PM"
en-GB    "Thursday, 11/04/2019, 13:13:14"
fr-FR    "jeudi 11/04/2019 à 13:13:14"
zh-CN    "2019年4月11日星期四 下午1:13:14"
您可以阅读中的所有选项

在另一个回答中,也有人建议您可以获取
toLocaleString
的输出,并使用
Date
对象的构造函数对其进行解析。由于以下原因,不建议采用这种方法:

  • ECMAScript规范不要求这些字符串可以由
    Date
    解析器处理。它只需要解析符合ISO8601标准的字符串,例如
    “2019-04-11T13:13:14”
    。其他任何事情(即使看起来很简单,如2019年11月4日下午1:13:14“)都取决于实现。换句话说,并非所有浏览器都会同意如何解析这些字符串,有些浏览器会拒绝,给出无效日期

  • Date
    对象的解析器将始终使用用户的当前区域设置。因此,如果您在
    toLocaleString
    调用中将区域设置硬编码为
    en US
    ,然后在英国对其进行解析,您将错误地翻转月份和日期组件。4月11日将被视为11月4日

  • 当您使用
    Date
    对象解析一个看起来像本地时间的字符串时,它会正确地假设它在用户的本地时区中。这是有后果的。考虑到您可能通过了在<代码>美国/NeXYOYKY/<代码>中有效的日期和时间,但在用户的本地时区中无效。例如,2019年3月31日凌晨1:30在美国是有效的,但在英国是无效的,因为它属于春季前进DST间隔(英国的时钟从00:59提前到02:00,跳过该小时)。在这种情况下,行为是未定义的。您可能会得到无效日期,或者您可能会得到00:30或02:30,但您不会得到01:30

  • 如果确实重建了
    Date
    对象,如果用户的时区与给定的时区不同,则创建的是一个非常不同的时间点。如果你把这个
    Date
    对象传递给其他对象,它就不会知道你指的是美国东部时间。最终,
    Date
    对象不跟踪日期,而是保留一个严格与UTC相关的Unix时间戳。事实上,名称
    Date
    令人困惑且不恰当(IMHO)


是的,在您的代码片段中,它正在工作。能否在此文档中添加x个安装日期。getElementById('ct')。innerHTML=x;你能再帮我一个忙吗。我必须在这里显示“2019年4月11日星期四”时间。哦!对因此,我必须为这一年做同样的事情,因为我需要2019年4月11日。正确吗?只需将其他参数传递给toLocaleString:
let str=new Date()。toLocaleString(“en-US”),{时区:“America/new_-York”,工作日:“long”,年:“numeric”,月:“numeric”,日:“numeric”,小时:“2位数”,分钟:“2位数”,秒:“2位数”);console.log(str)。这就是你所需要的。无需再次解析和格式化。@SalmanA,谢谢您的帮助,MaheerAli,我会检查一下moment.js。谢谢你的帮助。我这边投赞成票。我想这是因为你增加了一个时区。js日期的内部表示是一个数字,从1970年到现在的毫秒数。如果您随后试图使用getDate()的话,添加一个时区是不合适的!你分享了伟大的信息。谢谢你的帮助。非常感谢你的回答。我这边的投票。可以为输出创建一个片段吗?