Angular 如何在角度应用程序中跨多个时区显示截止日期?

Angular 如何在角度应用程序中跨多个时区显示截止日期?,angular,Angular,我们有一个ASP.NET核心web api,它在SQL Server中的DATETIME2列中存储UTC到期日期。因此,2020年8月15日在服务器上看起来像是'8/15/2020 12:00:00 AM'。我们的Angular客户端使用{dueDate | date:'shortDate'}并在下午1:09在EDT中显示8/14/2020。我们如何让它显示和格式化正确的日期,以便所有时区的客户都能看到8/15/2020?跨时区显示同一日期是个好主意吗 在网络上,dueDate是JSON消息的一

我们有一个ASP.NET核心web api,它在SQL Server中的
DATETIME2
列中存储UTC到期日期。因此,2020年8月15日在服务器上看起来像是
'8/15/2020 12:00:00 AM'
。我们的Angular客户端使用
{dueDate | date:'shortDate'}
并在下午1:09在EDT中显示
8/14/2020
。我们如何让它显示和格式化正确的日期,以便所有时区的客户都能看到
8/15/2020
?跨时区显示同一日期是个好主意吗

在网络上,
dueDate
是JSON消息的一部分,如下所示:

[{"dueDate":"2020-08-15T00:00:00-04:00"},{},{}]
我们的元数据知道它是一个日期,并将其转换为Javascript日期,以便可以针对当前区域性对其进行格式化


我意识到这是EDT中正确的日期,当时是UTC午夜,但用户可能不会。由于这是账单的到期日,我们不希望向用户显示看起来比实际日期更早的日期。

如果您仅将从服务器返回的内容视为字符串,则可以在客户端中使用从服务器获得的内容创建新的日期对象,但只从字符串中提取年、月和日。如果您只是将完整字符串从服务器传递给日期构造函数,它将把它转换为用户的时区

新日期(2020年8月15日)
将在用户当前的timzeone中创建2020年8月15日上午12点,并应使用Angular的日期管道正确显示


但是,如果您将其发送回服务器,事情会变得一团糟,因为服务器可能会尝试转换它。

您可以共享“dueDate”的内容吗?听起来您应该简单地将其视为字符串,因为您不希望在不同的时区显示不同的内容。完成。我们需要将其视为一个日期,以便根据当前的文化对其进行格式化。我的问题部分是技术性的,部分是实用性的,因为我不确定我们是否应该在所有时区显示相同的日期。忽略时间部分并强制各时区的日期相同是常见的做法吗?这实际上取决于用例。处理日期/时间/时区通常很糟糕。。。在我看来,在本例中,我会尝试将其作为字符串处理(并存储)。将来,可能有人会尝试以不同的方式使用该日期列,而不会意识到应用程序的其他部分只是使用日期部分并去掉时间/时区。这样,很明显,这不是一个日期时间,不应该这样使用