gecko/js/public/Date.h

72 lines
1.9 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef js_Date_h
#define js_Date_h
#include "mozilla/FloatingPoint.h"
#include "mozilla/MathAlgorithms.h"
#include "jstypes.h"
#include "js/Conversions.h"
#include "js/Value.h"
namespace JS {
class ClippedTime
{
double t;
/* ES5 15.9.1.14. */
double timeClip(double time) {
/* Steps 1-2. */
const double MaxTimeMagnitude = 8.64e15;
if (!mozilla::IsFinite(time) || mozilla::Abs(time) > MaxTimeMagnitude)
return JS::GenericNaN();
/* Step 3. */
return JS::ToInteger(time) + (+0.0);
}
public:
ClippedTime() : t(JS::GenericNaN()) {}
explicit ClippedTime(double time) : t(timeClip(time)) {}
static ClippedTime NaN() { return ClippedTime(); }
double value() const { return t; }
};
inline ClippedTime
TimeClip(double d)
{
return ClippedTime(d);
}
// Year is a year, month is 0-11, day is 1-based. The return value is
// a number of milliseconds since the epoch. Can return NaN.
JS_PUBLIC_API(double)
MakeDate(double year, unsigned month, unsigned day);
// Takes an integer number of milliseconds since the epoch and returns the
// year. Can return NaN, and will do so if NaN is passed in.
JS_PUBLIC_API(double)
YearFromTime(double time);
// Takes an integer number of milliseconds since the epoch and returns the
// month (0-11). Can return NaN, and will do so if NaN is passed in.
JS_PUBLIC_API(double)
MonthFromTime(double time);
// Takes an integer number of milliseconds since the epoch and returns the
// day (1-based). Can return NaN, and will do so if NaN is passed in.
JS_PUBLIC_API(double)
DayFromTime(double time);
} // namespace JS
#endif /* js_Date_h */