如何根据Javascript中的unix时间戳以编程方式确定前一时间段?

时间:2016-08-15 22:11:30

标签: javascript date unix

基本上我有两个unix时间戳,代表给定月份的第一天和最后一天。是否有可能以编程方式确定上个月的第一个和最后一个的时间戳?

例如,我有以下两个时间戳:
1467331201 - > July 1, 2016
1469923201 - > July 31, 2016

基本上,我可以分别以2016年6月1日和2016年6月30日的unix时间(或Date对象)以一致的方式操纵这两个数字吗?我遇到的问题是你不能简单地减去一个给定的金额,因为一个月的天数是可变的。

3 个答案:

答案 0 :(得分:2)

您可以使用此功能:

function getPreviousMonthRange(unixTime) {
    var dt = new Date(unixTime * 1000);
    dt.setUTCDate(0); // flips to the last day of previous month
    var unixLast = dt.getTime();
    dt.setUTCDate(1); // back to the first day of that same month
    var unixFirst = dt.getTime();
    return [unixFirst / 1000, unixLast / 1000];
}

// given first and last date (only one is really needed)
var unixTimeFirst = 1467331201;
var unixTimeLast = 1469923201;

// get previous month's first & last date
var [first, last] = getPreviousMonthRange(unixTimeFirst);

// output
console.log('previous month first day: ', first, new Date(first*1000));
console.log('previous month last day: ', last, new Date(last*1000));

答案 1 :(得分:1)

看看下面的例子:

// Specify a timestamp
var timestamp = 1467331201;

// Create a date object for the time stamp, the object works with milliseconds so multiply by 1000
var date = new Date(timestamp * 1000);

// Set the date to the previous month, on the first day
date.setUTCMonth(date.getUTCMonth() - 1, 1);

// Explicitly set the time to 00:00:00
date.setUTCHours(0, 0, 0);

// Get the timestamp for the first day
var beginTimestamp = date.getTime() / 1000;

// Increase the month by one, and set the date to the last day of the previous month
date.setUTCMonth(date.getUTCMonth() + 1, 0);

// Explicitly set the time to 23:59:59
date.setUTCHours(23, 59, 59);

// Get the timestamp for the last day
var endTimestamp = date.getTime() / 1000;

// Print the results
console.log('Timestamps for previous month: ');
console.log('Begin timestamp: ' + beginTimestamp);
console.log('End timestamp: ' + endTimestamp);

必须在顶部的变量中指定时间戳,这可能是您在问题中建议的两个时间戳之一,在一个月内的任何位置。

然后,此代码会根据您的请求计算上个月的开始和结束时间戳,并将结果打印到控制台。

请注意,在此示例中,开始时间戳使用00:00:00作为时间,结束时间戳使用23:59:59作为时间(当天的最后一秒)。这可以按照您喜欢的方式进行配置。

在这种情况下,我们正在使用...UTC... Date函数,因为Unix时间戳是UTC时间,而不是用户所在的时区。

语句date.setMonth(date.getMonth() + 1, 0);用于选择当月的最后一天。首先选择下个月,但由于该日期设置为0(而不是1),因此会减去一天,从而为您提供首选结果。这被描述为here

答案 2 :(得分:0)

您可以考虑使用Moment.js。我确定这不是你最终如何处理它,但请参阅下面的一些有用方法的例子。

var lastDayOfJuly = moment(1469923201);
var firstDayOfJuly = lastDayOfJuly.startOf('month');
var lastDayOfJune = firstDayOfJuly.subtract(1, 'day');
var firstDayOfJune = lastDayOfJune.startOf('month");

Moment.js