誰かが日付(例:今日)を取り、X日間戻る簡単な方法を知っていますか?
たとえば、今日の5日前の日付を計算する場合などです。
誰かが日付(例:今日)を取り、X日間戻る簡単な方法を知っていますか?
たとえば、今日の5日前の日付を計算する場合などです。
回答:
次のようなものを試してください:
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());
new Date(new Date().setDate(new Date().getDate()-5))
-それは5日前です。答えの例では、それを新しい日付に渡して日付オブジェクトを取得します。だからnew Date(d)
あなたが欲しいものです。
setDate(-1)
日付を月の最終日に設定します
toString
などの方法toISOString
、toDateString
など、
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);
Webアプリケーション全体で大量の日付の操作を実行している場合、DateJSを使用すると作業がはるかに簡単になります。
getTime()
そしてsetTime()
エポックからのミリ秒です。時間が年の境界を越えても問題はありません。
それはこのようなものになります:
var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
function getDaysAgo(b){var a=new Date;a.setDate(a.getDate()-b);return a};
その後、ちょうどvar daysAgo45 = getDaysAgo(45);
getDays + Xが日/月の境界を超えて機能しないことに気づきました。getTimeの使用は、日付が1970より前でない限り機能します。
var todayDate = new Date(), weekDate = new Date();
weekDate.setTime(todayDate.getTime()-(7*24*3600000));
moment.jsを取得します。すべてのクールな子供たちはそれを使用しています。より多くのフォーマットオプションなどがあります。
var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');
オプション!AngularバインディングのJS Date objに変換します。
var date = new Date(dateMnsFive.toISOString());
オプション!フォーマット
var date = dateMnsFive.format("YYYY-MM-DD");
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);
d.setDate(d.getDate() + days)
正の値と負の値の両方を使用して、それぞれ日数を加算および減算できます。また、(他のDateメソッドと同様に)インスタンスで機能し、コピーを作成して返す必要はありません。
既存のソリューションのいくつかは近いものでしたが、私が望んでいたものとまったく同じではありませんでした。この関数は、正または負の値の両方で機能し、境界ケースを処理します。
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
計算はミリ秒単位で行うのが好きです。だから使う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()
古いブラウザ(IE8など)では機能しません。ここにポリフィル。
@socketpairは私のだらしさを指摘しました。彼/彼女が言うように「年のいくつかの日は23時間、そしてタイムゾーンのルールのためにいくつかの25」を持っています。
さらに詳しく説明すると、夏時間の変更があるタイムゾーンで5日前のLOCAL日を計算する場合、上記の回答では夏時間の誤差が生じます。
Date.now()
現在のローカルの現在の時刻を与えると仮定する、または.toString()
ローカル日付を返すためDate.now()
、UTCの基準日と互換性がない使用。 ただし、すべてUTCで計算している場合は機能します。たとえば、
A. 5日前のUTC日付をNOW(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.「今」以外のUTC基準日から開始し、 Date.UTC()
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
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日の計算を行うためにこの方法をいつも使用しています。
これを簡単に外挿して、月、年などの時間の単位を作成できます。
日付を部分に分割し、調整された値で新しい日付を返します
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日。
2番目の変数を使用せずに、7をback x日で置き換えることができます。
let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))
日付操作のための関数を作成しました。日、時間、分をいくつでも加算または減算できます。
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, "-");
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>
上位の回答により、コードにバグが発生し、月の最初に現在の月の将来の日付が設定されました。これが私がしたことです、
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
日付を管理する簡単な方法は、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);
私にとって、すべての組み合わせは以下のコードのスニペットでうまく機能しました、スニペットはAngular-2実装用です、日を追加する必要がある場合は正のnumberofDaysを渡し、減算する必要がある場合は負のnumberofDaysを渡します
function addSubstractDays(date: Date, numberofDays: number): Date {
let d = new Date(date);
return new Date(
d.getFullYear(),
d.getMonth(),
(d.getDate() + numberofDays)
);
}
私はdate.jsから良い走行距離を得ます:
d = new Date();
d.add(-10).days(); // subtract 10 days
いいね!
ウェブサイトにはこの美しさが含まれています:
Datejsは文字列を解析するだけでなく、文字列を2つにきれいにスライスします
日数の減算と人間が読める形式の日付の両方をフォーマットする場合は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));
(このフィドルも参照してください)
次のコードを参照して、現在の日付から日数を引きます。また、差し引いた日付で月を設定します。
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);
日付を設定すると、日付はミリ秒に変換されるため、日付に戻す必要があります。
この方法も考慮に入れ、新年の変更など。
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) );
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;
それがあなたを助けることを願っています。
私はミリ秒に変換し、それ以外の日を差し引いた月と年は変更されず、論理的ではありません
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();
願ってる
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 );
このようなものを試してください
dateLimit = (curDate, limit) => {
offset = curDate.getDate() + limit
return new Date( curDate.setDate( offset) )
}
currDateは任意の日付にすることができます
制限は、日数の差である可能性があります(将来は正、過去は負)
これにより、過去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;
あなたはあなたの要件に応じて減算日を変更することができます
var daysToSubtract = 3;
$.datepicker.formatDate('yy/mm/dd', new Date() - daysToSubtract) ;
var d = new Date();
document.write('Today is: ' + d.toLocaleString());
d.setDate(d.getDate() - 31);
document.write('<br>5 days ago was: ' + d.toLocaleString());