首页 > 解决方案 > iOS 设备上的日期格式问题(vanilla JS)

问题描述

我目前正在使用 vanilla JavaScript 构建一个天气应用程序,并且遇到了我的格式化日期如何在我的 iPhone 上显示的问题。

这是我的代码:

dates = forecast.daily;
  let conditions = "";
  let minTemp = "";
  let maxTemp = "";
  let icon = "";
  let timestamp = "";
  let d = "";
  let formattedDate = "";

  let forecastInfoHTML = "";

  dates.forEach((day) => {
    conditions = day.weather[0].main;
    minTemp = Math.round(day.temp.min);
    maxTemp = Math.round(day.temp.max);
    icon = day.weather[0].icon;
    timestamp = day.dt;
    d = new Date(timestamp * 1000);
    formattedDate = new Intl.DateTimeFormat("en-US", {
      dateStyle: "medium",
    })
      .format(d)
      .substr(0, 6);

这就是我希望它的外观(在 Windows 和 Mac 浏览器上运行良好)-“2 月 15 日”:我希望它显示的正确方式

这就是它当前在我的 iPhone 上的显示方式 - “2/15/2”:显示不正确

JSON 数据使用 unix 编号,因此我需要能够将 unix 更改为日期。

标签: javascriptjsonapidatetime

解决方案


Intl.DateTimeFormat.dateStyleIOS Safari 不支持...正如您在此处看到的:MDN - Intl.DateTimeFormat - 兼容性表

我建议您探索一个用于更准确地处理日期和时间的 JS 库:Moment.js

这是有关格式化日期的文档部分。您还将找到操作它所需的一切。

因此,您的日期格式将如下所示:

// I don't know what is timestamp here...
//d = moment(timestamp * 1000);

// But this is equivalent to new Date()
// It creates a moment object with the current date/time
d = moment()

// And here is how to format it
console.log(d.format("MMM D"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>


推荐阅读