如何在JavaScript中获取今天开始的Unix时间戳?

27

我意识到可以使用以下代码生成当前时间戳...

var timestamp = Math.round((new Date()).getTime() / 1000);
我想要的是当前日期的时间戳。例如,当前时间戳大约为1314297250,我想能够生成1314230400,这是2011年8月25日的开始时间。

感谢您的帮助。

10个回答

50
var now = new Date();
var startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate());
var timestamp = startOfDay / 1000;

1
以这种方式,毫秒将始终为0,所以我认为Math.floor是多余的。 - pimvdb
感谢@Tim Down。其他答案也很好,但正如zzzz所指出的那样,这个更简短、更甜美。 - Anthony Jack
2
看起来第三行应该是:var timestamp = startOfDay.getTime() / 1000 - Adam C.
@AdamC.: 没问题,但没必要。startOfDay 会通过 valueOf() 自动转换。另请参见 https://dev59.com/Nmkw5IYBdhLWcg3ws8tj#9710267。 - Tim Down
返回未定义。 - Venkat Kotra
@VenkatKotra:不是的,timestamp 包含时间戳。 - Tim Down

10

嗯,最干净和最快的方法是使用:

long timestamp = 1314297250;
long beginOfDay = timestamp - (timestamp % 86400);

其中86400表示一天的秒数。


1
看起来很干净,但是不起作用。如果你在GMT+2时区,你将得到的时间将是02:00:00。 - AlexG

4
var now = new Date; // now

now.setHours(0);   // set hours to 0
now.setMinutes(0); // set minutes to 0
now.setSeconds(0); // set seconds to 0

var startOfDay = Math.floor(now / 1000); // divide by 1000, truncate milliseconds

创建所有这些对象真的有必要吗?您只需在“现在”上设置小时、分钟和秒即可。 - Cristian Vrabie
@Cristian Vrabie:是的,你说得对。不确定我当时在想什么,谢谢。 - pimvdb
现在的简化写法是:now.setHours(0,0,0,0); // h , m ,s , ms - yehonatan yehezkel

3
var d = new Date();
d.setHours(0);
d.setMinutes(0);
d.setSeconds(0);
d.setMilliseconds(0);
var t = d / 1000;

1
如果毫秒设置为“0”,那么我认为Math.floor没有什么用处。 - pimvdb
确实。我在看到其他答案后添加了它,但并没有多想。 - Alex Turpin
@Xeon06:那你为什么不编辑你的答案并将其删除,以免混淆他人?:] - trejder

3

Luis Fontes的解决方案返回UTC时间,因此与setHours解决方案可能相差1个小时(夏令时)。

var d = new Date();
var t = d - (d % 86400000);

上面的例子简化版(本地时间)。
var d = new Date();
d.setHours(0,0,0,0);
var t = d / 1000;

在这里你可以找到一些性能测试:http://jsperf.com/calc-start-of-day


3
另一种方法是减去一天长度的毫秒数取模,例如:
var day = 24*60*60*1000;
var start_of_today = Date.now() - Date.now() % day;

简单快捷。喜欢这个。 - dimcha

1

获取一天的开始的另一种选择是以下内容:

var now = new Date();
var beginningOfDay = new Date(now.getTime() -
                     now.getHours() * 60 * 60 * 1000 -
                     now.getMinutes() * 60 * 1000 -
                     now.getSeconds() * 1000 -
                     now.getMilliseconds());

0

对于任何日期,使用日期的 ISO 字符串('yyyy-mm-dd')很容易获取日期开始/结束的时间戳:

var dateString = '2017-07-13';
var startDateTS = new Date(`${dateString}T00:00:00.000Z`).valueOf();
var endDateTS = new Date(`${dateString}T23:59:59.999Z`).valueOf();

要获取今天的ISO字符串,您可以使用(new Date()).toISOString().substring(0, 10)。因此,要获取今天的TS:
var dateString = (new Date()).toISOString().substring(0, 10);
var startDateTS = new Date(`${dateString}T00:00:00.000Z`).valueOf();
var endDateTS = new Date(`${dateString}T23:59:59.999Z`).valueOf();

0
var yoursystemday = new Date(new Date().getTime()-(120000*60+new Date().getTimezoneOffset()*60000));
yoursystemday = new Date();
var current_time_stamp = Math.round(yoursystemday.getTime()/1000);

0
var now = new Date();
var startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate());
var timestamp = startOfDay.getTime() / 1000;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接