Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.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
Angular 素描日历<;p-日历>;-如何禁用UTC-Z时区_Angular_Date_Primeng - Fatal编程技术网

Angular 素描日历<;p-日历>;-如何禁用UTC-Z时区

Angular 素描日历<;p-日历>;-如何禁用UTC-Z时区,angular,date,primeng,Angular,Date,Primeng,有人知道是否可以禁用日期/时间选择器,使其无法自动将UTC时间添加到日期对象中吗?如下图所示,它正在自动将我的日期对象调整为UTC。我希望我的日期对象与10:00:00一起提交 {“reportedDate”:“2019-02-13T15:00:16.000Z” 使用偏移量将日期格式化为所需的时区 *编辑 坏例子(不要这样做): 根据经验: 我不知道你是怎么储存这个日期的。当你谈论时区时,事情会很快变得复杂。稍后,当您确实希望支持显示不同的时区时。然后,您必须在客户端设备上从东部转到中部。数据

有人知道是否可以禁用日期/时间选择器,使其无法自动将UTC时间添加到日期对象中吗?如下图所示,它正在自动将我的日期对象调整为UTC。我希望我的日期对象与10:00:00一起提交

{“reportedDate”:“2019-02-13T15:00:16.000Z”

使用偏移量将日期格式化为所需的时区

*编辑 坏例子(不要这样做):

根据经验: 我不知道你是怎么储存这个日期的。当你谈论时区时,事情会很快变得复杂。稍后,当您确实希望支持显示不同的时区时。然后,您必须在客户端设备上从东部转到中部。数据库中的所有条目都在东部时间,需要在后端进行转换。您的服务器现在位于不同的时区,您需要在每次服务调用中使用自定义逻辑(噩梦!!!)

现在帮自己一个忙,并将所有内容保存在UTC中。

根据(在属性表中):

您应该传递
[dataType]=“string”
。这将阻止构建
Date
对象,从而阻止任何时区转换

另外,我建议不要在条目的格式中使用时区缩写。请记住,夏令时可能会根据选择的日期生效,而且并非每个时区都有清晰一致的缩写,而且某些缩写(如CST或IST)是不明确的


如果您需要向用户指出输入的时间是美国东部时间,请将其放在文本框之外的某个位置。如果必须使用缩写,请使用
ET
作为通用形式。

它可能只是一个
Date
对象,在javascript中,当您将日期转换为字符串时,它始终采用该格式。你为什么想要另一个代理?您能否详细说明如何使用该值以及为什么会出现问题?我有多个用户在不同的时区使用此表单,我希望在提交和报告问题时使用一个标准时区(EST)。因此,当用户提交表单时,我不希望日期对象因用户浏览器/计算机的不同而发生变化,而是严格按照日期选择器中的日期进行选择。感谢您的回复,但这并不是对所问问题的真正回答。此外,这里描述的方法经常被引用,但存在缺陷。1) 在上面的第3行中,您已经在使用基于UTC的时间戳,因此通过本地偏移量调整它是不正确的。2) 在上面的第5行中,您假设时间戳将始终需要在EST(UTC-5)中,但根据DST是否有效,它可能需要在EDT(EST-4)中-这确实是给定示例日期的情况。3)在第6行中,您再次尝试按偏移量进行调整。此部分称为“历元移动”,仅当随后仅调用基于生成的
Date
对象的UTC函数时才能使用。虽然印度没有DST,但在其他时区,本地时区的DST转换可能会影响基于本地时间的函数的结果值,如此处显示的隐式字符串转换。总之,<代码>日期<代码>对象不能被调整到其他时区。事实上,考虑你的结果是错误的,因为3月22日2016在印度9:30实际上是美国东部时间3月22日2016时的午夜(0:00)。顺便说一句,在大多数浏览器中,您现在可以指定时区作为
tolocalString
的选项,例如:
console.log(新日期(1458619200000)。tolocalString(未定义,{timeZone:'America/new_-York'))
。这将正确地将UTC时间戳转换为所需的时区标识符。@MattJohnson确实如此。感谢您对代码进行的全面检查。我会离开这个帖子,这样人们就可以通过你的反馈看到答案。谢谢。谢谢马特的这个解决方案。我认为它应该用作
而不使用[]环绕数据类型,因为我们不需要在这里计算“字符串”。这对我不起作用,请您提供更多上下文。这对我有帮助,主要ng版本是6和6。
{"reportedDate": "2019-02-13T15:00:16.000Z"}


<p-calendar required [(ngModel)]="entry.reportedDate" name="reportedDate" #reportedDate="ngModel" [showIcon]="true" [showTime]="true" dateFormat="mm/dd/y 'EST'" hourFormat="24"></p-calendar>
var dt = new Date(1458619200000);
console.log(dt); // Gives Tue Mar 22 2016 09:30:00 GMT+0530 (IST)

dt.setTime(dt.getTime()+dt.getTimezoneOffset()*60*1000);
console.log(dt); // Gives Tue Mar 22 2016 04:00:00 GMT+0530 (IST)

var offset = -300; //Timezone offset for EST in minutes.
var estDate = new Date(dt.getTime() + offset*60*1000);
console.log(estDate); //Gives Mon Mar 21 2016 23:00:00 GMT+0530 (IST)
Name        Type      Default    Description
-----------------------------------------------------------------------------
dataType    string    date       Type of the value to write back to ngModel,
                                 default is date and alternative is string.