【问题标题】:How to get the first date of the current month in Node.js?如何在 Node.js 中获取当月的第一个日期?
【发布时间】:2015-12-09 10:13:16
【问题描述】:

我正在尝试使用 Node.js 获取当前月份的第一个和最后一个日期。

以下代码在浏览器(Chrome)中完美运行:

var date = new Date(), y = date.getFullYear(), m = date.getMonth();
var firstDay = new Date(y, m, 1);
var lastDay = new Date(y, m + 1, 0);

console.log(firstDay);
console.log(lastDay);

但它在 Node.js 中显示了不同的结果。我该如何解决?

【问题讨论】:

  • 有什么不同的结果?发布浏览器/nodejs 的结果
  • This 可能会有所帮助。
  • 在浏览器中 2015 年 12 月 1 日星期二 00:00:00 GMT+0530 (IST)2015 年 12 月 31 日星期四 00:00:00 GMT+0530 (IST) 在节点 js 2015-11-30T18:30 :00.000Z - 2015-12-30T18:30:00.000Z

标签: javascript node.js date


【解决方案1】:

在接受的答案中更改本机 Date 对象是不好的做法;不要那样做(https://stackoverflow.com/a/8859896/3929494

您应该使用 moment.js 为您在 node.js 和 所有 浏览器之间处理 JavaScript 中的日期提供一致的环境 - 将其视为抽象层。 http://momentjs.com/ - 很容易使用。

这里有一个非常相似的例子:https://stackoverflow.com/a/26131085/3929494

您可以通过https://tonicdev.com/jadaradix/momentjs在线试用

【讨论】:

  • 我认为没有人需要使用 moment.js 来获得两个 JS 环境之间的 Date 输出的一致性。您在这里没有解释为什么 OP 在日期输出方面存在差异。
  • 我已将“需要”更改为“应该”。使用 endOf 之类的方法会浪费很多样板文件。较旧的浏览器也会在日期方面出错,而像 moment.js 这样的库会处理这些错误。当您还必须处理国际化时,这是一个明显的胜利。我不知道为什么会有区别;我认为我的观点是使用 moment.js 会消除所有可能的差异。
  • 我并不是在诋毁 moment.js 作为一个好的抽象,我只是说 moment.js 本身并不是对特定问题的答案。它作为一个全面的问题解决者可能会有所帮助,但它不会让任何人了解 NodeJS 和浏览器计时之间的区别。我会 +1,因为它比当前的主导答案更好。
【解决方案2】:

浏览器输出显示当前时区的日期,node.js 显示日期 GMT / Zulu 时区。

(编辑:添加代码)。像这样的

var offset = (new Date().getTimezoneOffset() / 60) * -1;
var d = new Date();
var tmpDate = new Date(d.getTime()+offset);
var y = tmpDate.getFullYear();
var m = tmpDate.getMonth();
var firstDay = new Date(y, m, 1);
var lastDay = new Date(y, m + 1, 0);

console.log(tmpDate.toString());
console.log(firstDay.toString());
console.log(lastDay.toString());

【讨论】:

    【解决方案3】:

    创建一个新文件 dates.js 并添加以下代码。要执行此代码,请从终端运行命令 node dates.js。您可以使用此函数获取给定月份的第一天和最后一天的日期。我在 node 12

    上对此进行了测试
    const getDays = () => {
        const date = new Date();
        const year = date.getFullYear();
        let month = date.getMonth() + 1;
        let f = new Date(year, month, 1).getDate();
        let l = new Date(year, month, 0).getDate();
    
        f = f < 10 ? '0'+f : f;
        l = l < 10 ? '0'+l : l;
        month = month < 10 ? '0'+month : month;
        const firstDay = new Date(`${year}-${month}-${f}`);
        const lastDay = new Date(`${year}-${month}-${l}`);
    
        console.log({
            "firstDay": firstDay,
            "lastDay": lastDay
        });
    
    };
    
    getDays();
    

    【讨论】:

      【解决方案4】:

      看代码

      <html>
      <head>
          <title>Please Rate if it helps</title>
          <script>
              Date.prototype.getMonthStartEnd = function (start) {
                  var StartDate = new Date(this.getFullYear(), this.getMonth(), 1);
                  var EndDate = new Date(this.getFullYear(), this.getMonth() + 1, 0);
                  return [StartDate, EndDate];
              }
              window.onload = function () {
                  document.write(new Date().getMonthStartEnd());
              }
          </script>
      </head>
      <body>
      </body>
      </html>
      

      【讨论】:

      • 如何将其格式更改为 DD/MM/YYYY ?
      • 这个答案应该如何提供帮助?它没有解决 NodeJS 和 OP 声称已经看到的浏览器之间的差异......
      • 我不是 node 或 javascript 的极客程序员,这段代码正是我想要的。
      • 这显然不是 NodeJS 解决方案。它还修改 Date 对象。但 OP 接受 :( 因为他不是极客
      • @shennan 你能发布正确答案或任何解决方法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 2011-03-31
      • 2019-03-09
      相关资源
      最近更新 更多