将ISO-8601字符串转换为Typescript / javascript

时间:2019-01-18 09:04:42

标签: javascript typescript momentjs primeng-calendar

我正在Angular 6中进行开发。保存新记录时,我将表单值作为json保存在数据库中。如果最终用户想要显示存在的记录,我会从json数据中填充表单组件。但是我在转换日期时遇到了麻烦价值观。我无法正确投放本地日期。 我已经尝试了一下,但是没有用:

console.log("string Value",stringValue);
let date = moment(stringValue,"yyyy-mm-ddThh:mm:ss.fffZ");                             
console.log("date",date.format('DD/MM/YYY HH:mm:ss'));
  

字符串值输出:2019-01-17T21:00:00.000Z

     

控制台输出实际:日期18/01/2019 01:00:00

     

但希望控制台输出:日期18/01/2019 00:00:00

我尝试了“ YYYY-MM-DDThh:mm:ss.fffZ” ,但是也无法正常工作。

其他信息

保存数据:

process.data = JSON.stringify(this.form.getRawValue());
save(process);

html(primeng):

<p-calendar formControlName="startDate" dateFormat="dd.mm.yy"></p-calendar>

2 个答案:

答案 0 :(得分:0)

您可以使用moment.utc()来解析您的'2019-01-17T21:00:00.000Z'输入,因为它以UTC表示时间。

  

默认情况下,时刻会解析并以当地时间显示。

     

如果要解析或显示UTC时间,可以使用moment.utc()代替moment()

,然后使用local()将其转换为本地时区。

这里有一个现场样本:

const stringValue = '2019-01-17T21:00:00.000Z';
let date = moment.utc(stringValue).local();
console.log("date", date.format('DD/MM/YYYY HH:mm:ss'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>

答案 1 :(得分:0)

矩时区库的构建是为了“解析和显示任何时区中的日期”。

要在特定时区构造日期时间对象,请使用:

let now = moment.tz('Europe/Istanbul');

要查看UTC值,请使用

now.toISOString()

要查看本地时区值,请使用:

now.format('YYYY-MM-DD HH:mm:ss.SSS');