2016-08-15 4 views
2

基本的には、月の最初と最後の日を表す2つのUNIXタイムスタンプがあります。前月の最初と最後のタイムスタンプをプログラムで決定することは可能ですか?JavascriptのUNIXタイムスタンプに基づいて、以前の期間をプログラムで決定する方法はありますか。

例えば、私は、次の2つのタイムスタンプを持っている:
1467331201 - >July 1, 2016
1469923201 - >July 31, 2016

基本的に

、私はUNIX時間に順に一貫した方法でこれらの2つの数値を操作することができます2016年6月1日および2016年6月30日に、それぞれ(またはDateオブジェクト)?私が問題に遭遇しているのは、月の日数が変動するため、単に一定量を引くことができないということです。

+0

を? – trincot

+0

ある月の最初と最後の日にUNIXのタイムスタンプを取得する方法を聞いていますか? (月の日数を知らずに) –

答えて

2

あなたはこの機能を使用することができます:真夜中の後になぜ1秒

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

は、次の例を見てみましょう:タイムスタンプが上に変数で指定する必要があります

// 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);

、これはあなたがあなたの質問に提案2つのタイムスタンプの一つかもしれません、1ヶ月のどこでも。

このコードでは、要求した前月の開始と終了のタイムスタンプを計算し、その結果をコンソールに出力します。

この例では、開始タイムスタンプは時間として00:00:00を使用し、終了タイムスタンプは時間(その日の最後の1秒)として23:59:59を使用します。これは好みの方法で設定できます。 Unixタイムスタンプがないユーザーがいる時間帯で、UTC時刻であるので、この場合は

は、我々は、 ...UTC... Date機能で作業している。

声明date.setMonth(date.getMonth() + 1, 0);は最終日を選択するために使用されますその月に最初の翌月が選択されますが、その日が0(および1ではない)に設定されているため、1日が減算され、望ましい結果が得られます。これはhereと記載されています。

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

関連する問題