【问题标题】:How to do date rounding in Javascript? [closed]如何在 Javascript 中进行日期舍入? [关闭]
【发布时间】:2023-03-19 04:04:01
【问题描述】:

我有一系列日期,我想将它们四舍五入到不同的频率 - 周、月、季度和年。相当于舍入数字,但用于日期。

这是一个示例数组:

const dates = [
  "1/4/2020",
  "2/5/2021",
  "8/15/2021",
];

按月四舍五入会得出:

[
  "1/31/2020",
  "2/28/2021",
  "8/31/2021",
];

最近的年份:

[
  "12/31/2020",
  "12/31/2021",
  "12/31/2021",
];

等等。是否有允许这种舍入的 Javascript 库?如果没有,是否有一个简单的函数可以覆盖上述频率?我可以为每个用例编写一个自定义函数,但这可能效率低下。

【问题讨论】:

  • 不清楚如何获得最接近年份的值.... 二月与一月有何不同??
  • 我不相信有一个 JS 库来解决这个问题。必须编码。你试图做什么?
  • 在 Stack Overflow 上请求库是特别离题的。如果我是你,我会删除这个问题。
  • 另外,如果您需要帮助,请edit您的问题解释四舍五入规则,以及到目前为止您所做的尝试。
  • 向大家道歉 - 我会做更多的工作并提出更好的问题

标签: javascript arrays date momentjs


【解决方案1】:

假设您的第一个日期数组中有错字,并且“2/5/2020”的意思是“2/5/2021”(这可以解释您想要的结果),那么这段代码应该可以工作:

function roundMonth(dateString) {
  var date = new Date(Date.parse(dateString));
  var year = date.getFullYear();
  var month = date.getMonth();
  var date = new Date(year, month + 1, 0); 
    // day 0 yields the last day of the previous month, 
    // so we add 1 to the month value
  var year = date.getFullYear();
  var month = date.getMonth();
  var day = date.getDate();
  var date = [month + 1,day,year].join("/");
    // for string output we add 1 to month since Jan is month 0
  return date;
}

function roundYear(dateString) {
  var date = new Date(Date.parse(dateString));
  var year = date.getFullYear();
  var date = [12,31,year].join("/");
  return date;
}

【讨论】:

  • new Date(string) 与某些格式一起使用是有风险的,并且特定于浏览器、操作系统和区域设置。见Why does Date.parse give incorrect results?
  • @HereticMonkey 很高兴知道,谢谢。
  • new Date(Date.parse(dateString)) 将产生与new Date(dateString) 相同的结果,因此对 Date.parse 的调用是多余的。但是,根据@HereticMonkey 的评论,无论如何您都不应该使用内置解析器解析不受支持的格式。
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
相关资源
最近更新 更多