首页 > 解决方案 > 如何将时间戳格式化为日历格式日期?

问题描述

我正在使用devExtreme dxScheduler,我试图在从 api 获取会议后显示会议,问题是我无法重新创建原始日期格式(“YYYY-MM-DDThh:mm:ssZ”),因为我获取日期作为时间戳。

这是它的存储方式:

var startDate = moment("2021-05-24T16:30:00.000Z").valueOf()
// 1621873800000

这是我试图重新创建格式的方法:

var startDate = moment(new Date(startDate)).format("YYYY-MM-DDThh:mm:ssZ")
 //"2021-05-24T07:30:00+03:00"

请注意,原始日期(“2021-05-24T16:30:00.000Z”)和格式化日期(“2021-05-24T07:30:00+03:00”)不同......因此日历不显示它们。

标签: javascriptdevextreme

解决方案


修复 1

我从 DevExtreme 页面看到它需要以这种格式显示:

currentDate: new Date(2021, 4, 27)

也许您需要在添加之前对其进行格式化,如下所示:

var check = moment("2021-05-24T16:30:00.000Z", 'YYYY/MM/DD');

var month = check.format('M');
var day   = check.format('D');
var year  = check.format('YYYY');

console.log(month,day,year);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

然后在你的 dxScheduler 添加如下属性:

currentDate: new Date(year, month, day);

修复 2

如果这不是问题,您可以安装 moment-timezone

var a = moment.utc("2013-11-18 11:55").tz("Asia/Taipei");
var b = moment.utc("2013-11-18 11:55").tz("America/Toronto");

a.format(); // 2013-11-18T19:55:00+08:00
b.format(); // 2013-11-18T06:55:00-05:00

a.utc().format(); // 2013-11-18T11:55Z
b.utc().format(); // 2013-11-18T11:55Z

在此示例中,您首先在 UTC 中创建 moment.utc("2013-11-18 11:55") 对象,然后将其时区更改为指定的。如果您在默认时区创建对象,这也适用:moment("2013-11-18 11:55")。

请注意,创建的时刻具有相同的 UTC 时间,因为这些时刻是在默认时区中创建的。


推荐阅读