【问题标题】:Javascript Date - set just the date, ignoring time?Javascript Date - 只设置日期,忽略时间?
【发布时间】:2023-04-06 10:06:01
【问题描述】:

我有一堆对象,每个对象都有一个时间戳,我想按日期分组到一个 JSON 对象中。最终目标是这样的:

myObject = {
    "06/07/2012" : [ 
        {
            "timestamp" : "07/06/2012 13:30",
            ...
        },
        {
            "timestamp" : "07/06/2012 14:00",
            ...
        }
    ],
    "07/07/2012 [...]
}

为了获取日期,我正在测试每个 timestamp 对象并使用:

var visitDate = new Date(parseInt(item.timestamp, 10));
visitDate.setHours(0);
visitDate.setMinutes(0);
visitDate.setSeconds(0);

..然后我用它来存储 JSON 对象的名称。看起来很乱,我相信应该有更简单的做事方式。

欢迎提出建议!

【问题讨论】:

  • 我无法想象new Date(parseInt("07/06/2012 13:30",10)); 会起作用。还是我错过了什么?
  • 是的,你是对的 - 抱歉,这是从我现有的一些代码中粘贴出来的,没有经过校对!当前代码将时间戳存储为“从纪元开始的毫秒数”格式,因此在其原始上下文中更有意义...
  • 您应该始终使用.toISOString() 存储您的日期,您将遇到使用您拥有的字符串存储日期的时区问题。唯一要使用该格式的时间是在显示时。
  • 你是对的@justin.m.chase - 现在你应该这样做。写这个问题时,我们仍然必须支持不支持toISOString() 的IE8。哈利路亚,我们现在生活在一个现代世界!

标签: javascript date


【解决方案1】:

.toDateString() 怎么样?

或者,使用.getDate().getMonth().getYear()

在我看来,如果你想按日期对事物进行分组,你只是想访问日期,而不是设置它。通过设置访问日期字段的方式,您可以比较它们并将它们组合在一起,不是吗?

在这里查看所有有趣的 Date 方法:MDN Docs


编辑:如果您想要将其保留为日期对象,请执行以下操作:

var newDate = new Date(oldDate.toDateString());

Date 的构造函数在解析字符串方面非常聪明(尽管并非没有大量警告,但这应该可以始终如一地工作),因此使用旧 Date 并将其打印到日期而无需任何时间将产生与您相同的效果在原帖里有。

【讨论】:

  • 注意:向下滚动一点可以找到方法的完整列表。 toString 这么多变种,你的脑袋都要炸了。
  • 这可能是一种更明智的方法,我想将其保留为 Date 对象,尽管我猜它无论如何都存储为 JSON 中的文本!不使用.toDateString() 的最初原因是不确定字段中有空格。不要以为这真的很重要
  • .valueOf() - 这也很有用!谢谢!
  • 乐于助人。如果你愿意,我编辑了这个问题以提供一种将它们保留为 Date 对象的方法,如果它适合你的喜好
【解决方案2】:

如果您不介意创建额外的日期对象,您可以尝试:

var tempDate = new Date(parseInt(item.timestamp, 10));
var visitDate = new Date (tempDate.getUTCFullYear(), tempDate.getUTCMonth(), tempDate.getUTCDate());

我做了一些非常相似的事情来获取当前月份的日期,而没有时间。

【讨论】:

  • 我认为应该是getUTCDate。 getUTCDay 返回星期几 (0,6)。 getUTCDate 返回月份中的第几天 (1,31)
【解决方案3】:

var today = new Date();
var year = today.getFullYear();
var mes = today.getMonth()+1;
var dia = today.getDate();
var fecha =dia+"-"+mes+"-"+year;
console.log(fecha);

【讨论】:

    【解决方案4】:

    let date = new Date((new Date("07/06/2012 13:30")).toDateString())
    console.log(date)

    【讨论】:

      【解决方案5】:

      日期处理不可避免地很棘手。首先,如果您将日期时间作为 UTC ISO 字符串(“yyyy-MM-dd hh:mm:ss.000Z”)发送,将会省去很多麻烦。如果您将日期存储为字符串,请将它们存储为 ISO 字符串。用斜杠解析日期取决于语言环境,因此容易出错。 (欧洲人把天放在首位,美国人把月放在首位。)

      要从日期时间 ISO 字符串中获取日期字符串,请使用 myDatetimeString.substring(0,10)。要从日期字符串中获取日期对象,只需添加零...

      myUtcMidnightDateObject = new Date( myDateString + ' 00:00:00Z' )
      

      要格式化您的 UTC 午夜日期对象,请将 toLocaleString() 与 UTC 选项一起使用...

      myFormattedDate = myUtcMidnightDateObject.toLocaleDateString({},{ timeZone: "UTC" })
      

      更多细节可以在here找到。

      【讨论】:

        【解决方案6】:

        只需将本地日期字符串用“/”分割成数组,然后相应地排列,非常简单。

        var date=new Date();
        var datearray=date.toLocaleString().split("/");
        var sqldate= datearray[2].slice(0,4)+"-"+(datearray[0]<=9?"0"+datearray[0]:datearray[0])+"-"+(datearray[1]<=9?"0"+datearray[1]:datearray[1]);
        

        【讨论】:

          【解决方案7】:
          new Date().toISOString().split('T')[0]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-12-07
            • 2018-01-25
            • 1970-01-01
            • 1970-01-01
            • 2020-06-19
            • 2015-04-20
            • 2017-06-10
            相关资源
            最近更新 更多