如何在Javascript中开始和结束一天?

时间:2011-12-26 14:28:38

标签: javascript

今天如何以时间戳(GMT)开始(00:00:00)和结束(23:59:59)?计算机使用当地时间。

11 个答案:

答案 0 :(得分:402)

var start = new Date();
start.setHours(0,0,0,0);

var end = new Date();
end.setHours(23,59,59,999);

alert( start.toUTCString() + ':' + end.toUTCString() );

如果您需要从那些时间获取UTC时间,可以使用UTC()

答案 1 :(得分:204)

使用 momentjs 库,可以使用当前日期对象上的startOf()endOf()方法来实现,传递字符串{{1作为参数:

本地GMT:

'day'

For UTC:

var start = moment().startOf('day'); // set to 12:00 am today
var end = moment().endOf('day'); // set to 23:59 pm today

答案 2 :(得分:5)

如果你只是对时间戳感兴趣,你也可以这样做,可以方便地调整不同的时间间隔(小时:1000 * 60 * 60,12小时:1000 * 60 * 60 * 12等。)

const interval = 1000 * 60 * 60 * 24; // 24 hours in milliseconds

let startOfDay = Math.floor(Date.now() / interval) * interval;
let endOfDay = startOfDay + interval - 1; // 23:59:59:9999

答案 3 :(得分:3)

使用luxon.js库,使用startOf和endOf方法可以通过传递' day'作为参数

var DateTime = luxon.DateTime;
DateTime.local().startOf('day').toUTC().toISO(); //2017-11-16T18:30:00.000Z
DateTime.local().endOf('day').toUTC().toISO(); //2017-11-17T18:29:59.999Z
DateTime.fromISO(new Date().toISOString()).startOf('day').toUTC().toISO(); //2017-11-16T18:30:00.000Z
  

如果只需要本地时间

,请删除.toUTC()

你可能会问为什么不moment.js,答案是here

答案 4 :(得分:2)

MomentJs中,我们可以这样声明:

   const start = moment().format('YYYY-MM-DD 00:00:01');
   const end = moment().format('YYYY-MM-DD 23:59:59');

答案 5 :(得分:2)

我们可以为此使用 moment

// for day start time
moment(moment().startOf('day')).format('HH:mm')

// for day end time
moment(moment().endOf('day')).format('HH:mm')

答案 6 :(得分:1)

我更喜欢使用date-fns库进行日期操作。它是非常棒的模块化和一致的工具。你可以这样开始和结束:



var startOfDay = dateFns.startOfDay;
var endOfDay = dateFns.endOfDay;

console.log('start of day ==> ', startOfDay(new Date('2015-11-11')));
console.log('end of day ==> ', endOfDay(new Date('2015-11-11')));

<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.29.0/date_fns.min.js"></script>
&#13;
&#13;
&#13;

答案 7 :(得分:1)

FYI(Tvanfosson的合并版本)

  

它将在调用函数时返回实际日期=>日期

export const today = {
  iso: {
    start: () => new Date(new Date().setHours(0, 0, 0, 0)).toISOString(),
    now: () => new Date().toISOString(),
    end: () => new Date(new Date().setHours(23, 59, 59, 999)).toISOString()
  },
  local: {
  start: () => new Date(new Date(new Date().setHours(0, 0, 0, 0)).toString().split('GMT')[0] + ' UTC').toISOString(),
  now: () => new Date(new Date().toString().split('GMT')[0] + ' UTC').toISOString(),
  end: () => new Date(new Date(new Date().setHours(23, 59, 59, 999)).toString().split('GMT')[0] + ' UTC').toISOString()
  }
}

//使用方法

today.local.now(); //"2018-09-07T01:48:48.000Z" BAKU +04:00
today.iso.now(); // "2018-09-06T21:49:00.304Z" * 

*它适用于Java8上的即时时间类型,该时间类型会根据您所在的地区自动转换您的本地时间。(如果您打算编写全局应用程序)

答案 8 :(得分:1)

这是我们可以使用LocalDate以Java 8样式实现的方法:

LocalDate localDateStart = LocalDate.now().plusDays(5);
Date startDate = Date.from(localDateStart.atStartOfDay(ZoneId.systemDefault()).toInstant());

LocalDate localDateEnd = localDateStart.plusDays(1);
Date endDate = Date.from(localDateEnd.atStartOfDay(ZoneId.systemDefault()).toInstant());

答案 9 :(得分:1)

// get current time for UTC timezone
const d = new Date();
const year = d.getUTCFullYear();
const month = d.getUTCMonth();
const day = d.getUTCDate();
// set time to begin day UTC
const startTime = Date.UTC(year, month, day, 0, 0, 0, 0);
//set time to end day UTC
const endTime = Date.UTC(year, month, day, 23, 59, 0, 0);

答案 10 :(得分:0)

这可能有点棘手,但是您可以使用Intl.DateTimeFormat

以下代码段可以帮助您将具有任何时区的任何日期转换为其开始/结束时间。

const beginingOfDay = (options = {}) => {
  const { date = new Date(), timeZone } = options;
  const parts = Intl.DateTimeFormat("en-US", {
    timeZone,
    hourCycle: "h23",
    hour: "numeric",
    minute: "numeric",
    second: "numeric",
  }).formatToParts(date);
  const hour = parseInt(parts.find((i) => i.type === "hour").value);
  const minute = parseInt(parts.find((i) => i.type === "minute").value);
  const second = parseInt(parts.find((i) => i.type === "second").value);
  return new Date(
    1000 *
      Math.floor(
        (date - hour * 3600000 - minute * 60000 - second * 1000) / 1000
      )
  );
};

const endOfDay = (...args) =>
  new Date(beginingOfDay(...args).getTime() + 86399999);

const beginingOfYear = () => {};

console.log(beginingOfDay({ timeZone: "GMT" }));
console.log(endOfDay({ timeZone: "GMT" }));
console.log(beginingOfDay({ timeZone: "Asia/Tokyo" }));
console.log(endOfDay({ timeZone: "Asia/Tokyo" }));