web-dev-qa-db-ja.com

JavaScriptで日付から日数を引く

誰かが簡単に日付をとる方法(例:Today)とX日前に戻ることを知っていますか?

だから、たとえば、今日の5日前に日付を計算したいとします。

485
jonhobbs

このようなことを試してください:

 var d = new Date();
 d.setDate(d.getDate()-5);

これは日付オブジェクトを変更し、更新された日付の時間値を返すことに注意してください。

var d = new Date();

document.write('Today is: ' + d.toLocaleString());

d.setDate(d.getDate() - 5);

document.write('<br>5 days ago was: ' + d.toLocaleString());
757
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);

あなたがあなたのWebアプリケーションを通して頭の痛い日付操作をたくさん行っているなら、 DateJS はあなたの人生をずっと楽にするでしょう:

http://simonwillison.net/2007/Dec/3/datejs/ /

60
karim79

これは次のようになります。

var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
47
Chris Nielsen

GetDays + Xは日/月の境界を越えては機能しないことに気づきました。 getTimeの使用は、あなたの日付が1970年以前でない限り有効です。

var todayDate = new Date(), weekDate = new Date();
weekDate.setTime(todayDate.getTime()-(7*24*3600000));
22
awjr

moment.jsを入手してください。クールな子供たち全員がそれを使っています。もっとフォーマットオプションなどがあります。

var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');

オプション! AngularバインディングのJS Dateオブジェクトに変換します。

var date = new Date(dateMnsFive.toISOString());

オプション!フォーマット

var date = dateMnsFive.format("YYYY-MM-DD");
13
Kentonbmax

私は日を引くために負の値を渡し、日を加えるために正の値を渡すことができるようにDateのためにこのプロトタイプを作りました。

if(!Date.prototype.adjustDate){
    Date.prototype.adjustDate = function(days){
        var date;

        days = days || 0;

        if(days === 0){
            date = new Date( this.getTime() );
        } else if(days > 0) {
            date = new Date( this.getTime() );

            date.setDate(date.getDate() + days);
        } else {
            date = new Date(
                this.getFullYear(),
                this.getMonth(),
                this.getDate() - Math.abs(days),
                this.getHours(),
                this.getMinutes(),
                this.getSeconds(),
                this.getMilliseconds()
            );
        }

        this.setTime(date.getTime());

        return this;
    };
}

だから、それを使用するために私は単に書くことができます:

var date_subtract = new Date().adjustDate(-4),
    date_add = new Date().adjustDate(4);
12
Rob Dawley

私は数ミリ秒で数学をするのが好きです。だからDate.now()を使う

var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds

そしてあなたがそれがフォーマットされて好きなら

new Date(newDate).toString(); // or .toUTCString or .toISOString ...

注:Date.now()は古いブラウザ(IE 8など)では動作しません。 ここに記入しなさい

アップデート2015年6月

@socketpairは私のずさんさを指摘しました。 「年には23時間、タイムゾーンの規則のために約25時間ある」と彼は言う。

それを拡張するために、上記の答えは、5日前のLOCAL日を夏時間の変更を伴うタイムゾーンで計算したい場合に、夏時間の不正確さを示します。

  • Date.now()があなたに現在のLOCALを今すぐ与えると仮定して(間違って)、または
  • 現地日付を返す.toString()を使用します。したがって、UTCのDate.now()基準日とは互換性がありません。

しかし、それはあなたがあなたの数学をすべてUTCでやっているなら、うまくいきます、例えば。

A. UTCから5日前のUTC日付が必要です

var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds UTC
new Date(newDate).toUTCString(); // or .toISOString(), BUT NOT toString

B. Date.UTC()を使って、 "now"以外のUTC基準日から始めます。

newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
10
poshest

日付を分割して、調整した値を使って新しい日付を返します。

function DateAdd(date, type, amount){
    var y = date.getFullYear(),
        m = date.getMonth(),
        d = date.getDate();
    if(type === 'y'){
        y += amount;
    };
    if(type === 'm'){
        m += amount;
    };
    if(type === 'd'){
        d += amount;
    };
    return new Date(y, m, d);
}

月はゼロから始まり、日はそうではありません。すなわち、新しい日付(2009、1、1)== 2009年2月1日、新しい日付(2009、1、0)== 2009年1月31日。

9
Joshua

いくつかの既存の解決策は近いものでしたが、私が望んでいたものとはまったく異なります。この関数は正または負の両方の値で機能し、境界ケースを処理します。

function addDays(date, days) {
    return new Date(
        date.getFullYear(),
        date.getMonth(),
        date.getDate() + days,
        date.getHours(),
        date.getMinutes(),
        date.getSeconds(),
        date.getMilliseconds()
    );
}
9
Joel Fillmore

私はgetDate()/ setDate()メソッドに問題があることを見つけました。

その代わりに、私は1日= 86,400,000ミリ秒という事実を解決するのが好きです。

だから、あなたの特定の質問のために:

today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))

魅力のように働きます。

私は、30/60/365日のローリング計算をするために、この方法をいつも使っています。

これを簡単に外挿して、月、年などの時間の単位を作成できます。

6

2番目の変数を使用せずに、7をxの日数に置き換えることができます。

let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))
3
vaibhavmaster
function addDays (date, daysToAdd) {
  var _24HoursInMilliseconds = 86400000;
  return new Date(date.getTime() + daysToAdd * _24HoursInMilliseconds);
};

var now = new Date();

var yesterday = addDays(now, - 1);

var tomorrow = addDays(now, 1);
3
Petr Makarov

MomentJSを使用してください。

function getXDaysBeforeDate(referenceDate, x) {
  return moment(referenceDate).subtract(x , 'day').format('MMMM Do YYYY, h:mm:ss a');
}

var yourDate = new Date(); // let's say today
var valueOfX = 7; // let's say 7 days before

console.log(getXDaysBeforeDate(yourDate, valueOfX));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
2

私にとっては、すべての組み合わせが以下のコードスニペットでうまく機能しました。スニペットはAngular-2実装用です。日数を追加する必要がある場合は、正のnumberofDaysを渡します。

function addSubstractDays(date: Date, numberofDays: number): Date {
let d = new Date(date);
return new Date(
    d.getFullYear(),
    d.getMonth(),
    (d.getDate() + numberofDays)
);
}
1
pritesh agrawal

日付操作用の関数を作成しました。あなたは何日、何時間、何分でも足したり引いたりすることができます。

function dateManipulation(date, days, hrs, mins, operator) {
   date = new Date(date);
   if (operator == "-") {
      var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
      var newDate = new Date(date.getTime() - durationInMs);
   } else {
      var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
      var newDate = new Date(date.getTime() + durationInMs);
   }
   return newDate;
 }

では、パラメータを渡してこの関数を呼び出します。たとえば、今日から3日前に日付を取得するための関数呼び出しです。

var today = new Date();
var newDate = dateManipulation(today, 3, 0, 0, "-");
1
Malvi Panchal

日付を管理する簡単な方法は Moment.js を使うことです。

addを使うことができます。例

var startdate = "20.03.2014";
var new_date = moment(startdate, "DD.MM.YYYY");
new_date.add(5, 'days'); //Add 5 days to start date
alert(new_date);

ドキュメント http://momentjs.com/docs/#/manipulating/add/

1
Juan Caicedo

一番上の答えは私のコードのバグにつながりました。そこでは月の最初にそれが今月の未来の日付を設定するでしょう。これが私がしたことです、

curDate = new Date(); // Took current date as an example
prvDate = new Date(0); // Date set to Epoch 0
prvDate.setUTCMilliseconds((curDate - (5 * 24 * 60 * 60 * 1000))); //Set Epoch time
1
Kishore Avineni

次のコードを参照して、現在の日付から日数を引いてください。また、減算日に従って月を設定してください。

var today = new Date();
var substract_no_of_days = 25;

today.setTime(today.getTime() - substract_no_of_days* 24 * 60 * 60 * 1000);
var substracted_date = (today.getMonth()+1) + "/" +today.getDate() + "/" + today.getFullYear();

alert(substracted_date);
1
Manoj Jha

日数を引いて日付を人間が読める形式にフォーマットしたい場合は、次のようなカスタムのDateHelperオブジェクトを作成することを検討してください。

var DateHelper = {
    addDays : function(aDate, numberOfDays) {
        aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
        return aDate;                                  // Return the date
    },
    format : function format(date) {
        return [
           ("0" + date.getDate()).slice(-2),           // Get day and pad it with zeroes
           ("0" + (date.getMonth()+1)).slice(-2),      // Get month and pad it with zeroes
           date.getFullYear()                          // Get full year
        ].join('/');                                   // Glue the pieces together
    }
}

// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Subtract 5 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -5));

this Fiddle も参照)

1
John Slegers

Date.jsからかなりのマイレージが得られます。

http://www.datejs.com/

d = new Date();
d.add(-10).days();  // subtract 10 days

いいね!

ウェブサイトはこの美しさを含みます:

Datejsは文字列を解析するだけではなく、きれいに2つにスライスします。

1
Bret Weinraub

あなたはJavascriptを使うことができます。

var CurrDate = new Date(); // Current Date
var numberOfDays = 5;
var days = CurrDate.setDate(CurrDate.getDate() + numberOfDays);
alert(days); // It will print 5 days before today

PHPの場合

$date =  date('Y-m-d', strtotime("-5 days")); // it shows 5 days before today.
echo $date;

お役に立てば幸いです。

0
Phoenix

Momentjsを使って今日の5日前の日付を見つける方法をご覧ください。

moment(Date.now() - 5 * 24 * 3600 * 1000).format('YYYY-MM-DD') // 2019-01-03
0
Purkhalo Alex

このようなことを試してください

dateLimit = (curDate, limit) => {
    offset  = curDate.getDate() + limit
    return new Date( curDate.setDate( offset) )
}

currDate は任意の日付

limit は日数の差である可能性があります(将来はプラス、過去はマイナス)

0
wahid_abdul

一行なので次のようにします。 DSTの変更には完璧ではありませんが、通常は私のニーズには十分です。

var fiveDaysAgo = new Date(new Date() - (1000*60*60*24*5));
0
ScottE
var date = new Date();
var day = date.getDate();
var mnth = date.getMonth() + 1;

var fDate = day + '/' + mnth + '/' + date.getFullYear();
document.write('Today is: ' + fDate);
var subDate = date.setDate(date.getDate() - 1);
var todate = new Date(subDate);
var today = todate.getDate();
var tomnth = todate.getMonth() + 1;
var endDate = today + '/' + tomnth + '/' + todate.getFullYear();
document.write('<br>1 days ago was: ' + endDate );
0
belal ahmad

日付を設定すると、日付はミリ秒に変換されるので、日付に戻す必要があります。

この方法はまた、新年の変更なども考慮に入れます。

function addDays( date, days ) {
    var dateInMs = date.setDate(date.getDate() - days);
    return new Date(dateInMs);
}

var date_from = new Date();
var date_to = addDays( new Date(), parseInt(days) );
0
Daniel Williams

最新のJavaScript関数構文の使用

const getDaysPastDate = (daysBefore, date = new Date) => new Date(date - (1000 * 60 * 60 * 24 * daysBefore));

console.log(getDaysPastDate(1)); // yesterday
0
vdegenne
var d = new Date();

document.write('Today is: ' + d.toLocaleString());

d.setDate(d.getDate() - 31);

document.write('<br>5 days ago was: ' + d.toLocaleString());
0
gatlingovind

私は遊んでいて、簡単な解決策を見つけました:

.setDate(+daysCount|-daysCount);を使用しますシンボル=|-は必須です。

let today = new Date();
today.setDate(-100);
console.log('date100DaysAgo', today);

today = new Date();
today.setDate(+100);
console.log('date100DaysAhead', today);
0
Black Mamba

私はミリ秒に変換し、それ以外の月と年は差し引かれ論理的にならない日を差し引いた

var numberOfDays = 10;//number of days need to deducted or added
var date = "01-01-2018"// date need to change
var dt = new Date(parseInt(date.substring(6), 10),        // Year
              parseInt(date.substring(3,5), 10) - 1, // Month (0-11)
              parseInt(date.substring(0,2), 10));
var new_dt = dt.setMilliseconds(dt.getMilliseconds() - numberOfDays*24*60*60*1000);
new_dt = new Date(new_dt);
var changed_date = new_dt.getDate()+"-"+(new_dt.getMonth()+1)+"-"+new_dt.getFullYear();

希望が役立ちます

0
hemanjosko
var today = new Date();
var tmpDate = new Date();
var i = -3; var dateArray = [];
while( i < 4 ){
    tmpDate = tmpDate.setDate(today.getDate() + i);
  tmpDate = new Date( tmpDate );
  var dateString = ( '0' + ( tmpDate.getMonth() + 1 ) ).slice(-2) + '-' + ( '0' + tmpDate.getDate()).slice(-2) + '-' + tmpDate.getFullYear();
    dateArray.Push( dateString );
    i++;
}
console.log( dateArray );
0
zion

これはあなたに最後の10日の結果を与えるでしょう110%はあなたがどんな種類の問題も受けないでしょう働く

var date = new Date();
var day=date.getDate();
var month=date.getMonth() + 1;
var year=date.getFullYear();
var startDate=day+"/"+month+"/"+year;
var dayBeforeNineDays=moment().subtract(10, 'days').format('DD/MM/YYYY');
startDate=dayBeforeNineDays;
var endDate=day+"/"+month+"/"+year;

あなたの要件に応じて減算日数を変更することができます

0
Zubair