基本上我有两个unix时间戳,代表给定月份的第一天和最后一天。是否有可能以编程方式确定上个月的第一个和最后一个的时间戳?
例如,我有以下两个时间戳:
1467331201
- > July 1, 2016
1469923201
- > July 31, 2016
基本上,我可以分别以2016年6月1日和2016年6月30日的unix时间(或Date对象)以一致的方式操纵这两个数字吗?我遇到的问题是你不能简单地减去一个给定的金额,因为一个月的天数是可变的。
答案 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");