如何更新 API URL 查询字符串中的日期变量

How can I update a date variable in an API URL query string

我正在使用提取 API 从服务器检索一些 JSON 数据。

获取调用看起来像这样,它依赖于查询字符串中的当前日期到return当前日期的数据。

fetch(`https://www.some-url/apps/bookings/calendar-json.php?todayDate=${year}-${month}-${day}`)
  .then(r => r.json)... ``

数据 returned 基本上显示了 API url 中设置的当前日期的可用预订。

我想要一组控件,允许用户将日期递增或递减 1 天,以通过获取新数据来显示该特定日期的预订。为此,我打算获取 ISO 格式的当前日期(如下所示),然后将年、月、日拆分为单独的变量,并在 API 查询字符串中使用它们。 -

const date = new Date();
const isoFormat = date.toISOString();
const currentDate = isoFormat.substr(0,10);

从那里,是否可以通过 increment/decrement 操纵日期变量以获取 API URL 中的前几天或后几天的日期?我想有点像计数器。

或者是否有更好的方法来处理这个问题?像 moment.js 之类的包裹?

如果要 increment/decrement 日期,使用单独的变量来表示年月日会更容易:

let today = new Date();
let yyyy = today.getFullYear();
let mm = today.getMonth()+1; // getMonth() is zero-based
let dd  = today.getDate();

或者直接使用日期对象,

let offsetByDays = (24*60*60*1000) * 2; //2 days
let date= new Date();
date.setTime(date.getTime() - offsetByDays );
let formattedDate = date.toISOString().slice(0,10);

moment.js 参见:momentJS date string add 5 days

注意:您在使用 .toISOString() 时也考虑到了时区。

我通过创建一组控件 increment/decrement 日期来解决这个问题。我使用上面的答案之一来帮助实现这一目标。我没有将日、月、年拆分为各自的变量,而是将其保留为一个变量。

let date = new Date();
let today = date.setTime(date.getTime());
let day = 24 * 60 * 60 * 1000;
let dateVal;
let urlDate;

next.addEventListener("click", (e) => {
  dateVal = today += day;
  urlDate = new Date(dateVal);
  let formattedDate = urlDate.toISOString().slice(0, 10);
  console.log(formattedDate);
});

prev.addEventListener("click", (e) => {
  dateVal = today -= day;
  urlDate = new Date(dateVal);
  let formattedDate = urlDate.toISOString().slice(0, 10);
  console.log(formattedDate);
});