javascript - .NET 日期、Moment.js、UTC 和时区转换

标签 javascript date datetime momentjs

我通过 Ajax 调用获得了 UTC 日期,例如“/日期(1517216466000+0100)/”
这是打印到控制台时的情况:Mon Jan 29 2018 10:01:06 GMT+0100 (W. Europe Standard Time)

我需要做的是让用户更改时区:我可以轻松地使用例如moment(myDate).tz(“日本”)

然后我需要以 UTC 格式保存日期,但我无法做到。
我一直在尝试使用 moment.utc(),但对于上面的输入,它返回减少 1 小时

遇到这种情况该如何处理呢?总结一下:
1.从网络服务获取UTC时间
2.让用户更改时区
3.以UTC格式保存修改后的日期(不带时区)
工作演示:https://stackblitz.com/edit/angular-kqrct7?file=app%2Fapp.component.html

编辑澄清:
让我们看看时间。我从 WCF 得到的日期是 10 点。浏览器将其解释为 10 点钟,但采用 GMT+1,因此当我将其转换为 UTC 时,它变为 9 点钟。
我希望它是UTC 10 点。然后,如果我修改时区,例如该日期的分钟,我希望能够获取该日期的 UTC 值。

EDIT2:使我的问题更简单以供澄清

  1. 我有一个 UTC 日期,该日期是从网络服务中获取的,例如:“/Date(1517216466000+0100)/”,即:2018 年 1 月 29 日星期一 10:01:06 GMT+0100 (W.欧洲标准时间)打印到控制台时。

  2. 我用 moment(this.inputDate).tz("Europe/Berlin").format() 添加时区,但它仍然是 10:01:06,我猜是因为我的浏览器 GMT+ 1.

  3. 我希望将原始字符串用作 UTC 日期,并且它应该保留为 10:01:06,而不是 09:01:06,如您在上面看到的(第二时刻示例),因此使用时区“欧洲/柏林”将是 11:01:6

最佳答案

.NET JSON formatted date "/Date(1517216466000+0100)/"时区偏移量可以忽略。它表示“2018-01-29T09:01:06.000Z”,其中源系统的时区偏移量为 +0100。因此,如果您不关心源时区,请忽略它。

这也是与 2018 年 1 月 29 日星期一 10:01:06 GMT+0100(西欧标准时间)相同的时刻,只是偏移量不同。

UTC 不是一种格式,而是一种时间标准。如果您想使用 ISO 8601 格式:

  1. 提取第一个数值
  2. 转换为数字
  3. 传递给日期构造函数
  4. 对结果 Date 调用 toISOString 方法

var s = '/Date(-1517216466000+0100)/';
console.log(new Date(+s.replace(/^[^\d-]+(-?\d+).*$/,'$1')).toISOString());

您还可以使用 moment.js 对其进行解析和格式化,根据the documentation可以处理.NET JSON格式,无需指定格式。因此,您可以这样做,也可以提取时间值并使用“x”格式标记对其进行解析:

var s = '/Date(1517216466000+0100)/';

// Let moment.js guess the format
console.log(moment(s).utc());

// Extract time value and supply format
console.log(moment(s.replace(/^[^\d-]+(-?\d+).*$/,'$1'), 'x').utc());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>

关于javascript - .NET 日期、Moment.js、UTC 和时区转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48502165/

相关文章:

javascript - 无法收听 twilio 视频 javascript 端点

javascript - 乘法给出近似结果

javascript - 使用 jQuery/JS 确定星期几

php - 从数组中的特定行获取数据

c# - asp.net通过JS基于其他文本框值更新文本框

javascript - 如何使用 JSON Map 响应通过 Angular ng-repeat 生成表

Javascript:通过属性初始化对象

python - 转换多种类型的日期

hibernate - @Temporal(TemporalType.DATE) 的问题

r - 用R解析ISO8601日期和时间格式