繁体   English   中英

javascript日期或下一个日期(基于一天中的时间)以及是否/其他

[英]javascript Date or next date based on time of day and if/else

我想在我的网站上显示我当前的运送时间。 每天我都有2:00 pm的时间,并希望将日期更改为下一个工作日。 现在我必须每天手动更改

Currently Shipping:
Tuesday, April, 24th
Cut-off Time:
2:00 pm PST

我已经进行了足够的研究,相信这是可能的,但是我对自己亲自操作脚本并整理所有内容的了解还不够。

两点通常不会更改,所以我希望我可以使用脚本在指定时间自动更改(仅是日,月和日期)

请指教谢谢!

到目前为止,我一直在尝试整合

var currentTime = new Date();
var month = currentTime.getDay();
var month = currentTime.getMonth() + 1;
var date = currentTime.getDate();
var thehour = datetoday.getHours();
if(thehour < 14) { document.write(day + "," + month + "," + date) }
else if (thehour > 14) ...

首先,您必须在服务器上执行此操作,因为客户端计算机不知道正确的时区偏移量(可能是-8小时或-7小时,具体取决于是否为夏时制),并且客户端时钟可能没有正确设置(或可能被故意错误设置)。

因此,如果要将偏移量发送给客户端,则最好只发送时间。 并且,当您发送区域时,不要仅仅发送PST,因为这对许多人来说是模棱两可的,请发送实际的偏移量(适当时为UTC -8或-7)。 或以UTC发送截止时间,让用户自己计算。

例如,要将本地时间转换为其他时区,可以执行以下操作:

var pstOffset = 480; // Standard time offset
var pdtOffset = 420  // Daylight saving offset
var now = new Date();

// Adjust to PST
now.setMinutes(now.getMinutes() + now.getTimezoneOffset() - pstOffset);

alert(now); // Time in PST

但是请注意,日期对象仍位于本地时区,因为您不能更改实际偏移量,只能调整时间以允许它。

要发送截止时间并将其转换为本地时间,最简单的方法是发送UTC时间戳并将其转换为本地框,因此:

var ts  = '2012-04-24T08:00:00Z'; // UTC cut-off for standard time on 24/4
var tsd = '2012-04-24T07:00:00Z'; // UTC cut-off for daylight saving time on 24/4

function utcToLocal(s) {
  var bits = s.split(/[-T:Z]/g); // Split string into useful bits
  var d = new Date();

  // Set local date object to UTC supplied time
  d.setUTCFullYear(bits[0], bits[1] - 1, bits[2]);
  d.setUTCHours(+bits[3], +bits[4], +bits[5]);
  return d;
}

alert( 'Your clock says it\'s now ' + (new Date()) +
       '\nThe cut-off for shipping is ' + utcToLocal(ts));

并根据服务器时间发送适当的UTC时间戳(例如,如果他们错过了4月24日的发货时间,则将其发送给4月25日)。

编辑

这是一个完整的解决方案,但是请记住我说过不要在客户端上执行此操作:

/* Get the cut-off of 2pm PST or PDT on current or
 * next working day. If d is true (e.g. 1) use PDT, 
 * otherwise use PST   
**/
function setCutoffTime(d) {
  var pstOffset = 480; // PST offset in minutes
  var psdOffset = 420; // PDT offset in minutes
  var now = new Date();
  var addDays = 0;
  var cutoff;
  var days = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');
  var months = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');

  // Utility to add a leading zero      
  function addZ(n) {
    return (n<10?'0':'') + n;
  }

  // Convert to PST time
  now.setMinutes(now.getMinutes() + 
                 now.getTimezoneOffset() - (d? psdOffset : pstOffset));

  // If after 2pm, push to tomorrow
  if (now.getHours() > 14) now.setHours(now.getHours() + 12);

  // If on a weekend, push to Monday
  if (now.getDay() == 6) addDays = 2;
  if (now.getDay() == 0) addDays = 1;

  now.setDate(now.getDate() + addDays);

  // Now on working day pre 2pm, so set time to 14:00
  now.setHours(14, 0, 0);

  // And convert back to local time
  now.setMinutes(now.getMinutes() - now.getTimezoneOffset() + 
                 (d? psdOffset : pstOffset));

  // Return a formatted string - should  be a separate function
  return 'Shipping cut-off: ' + 
          addZ(now.getHours()) + ':' +
          addZ(now.getMinutes()) + ' on ' +
          days[now.getDay()] + ', ' +
          now.getDate() + ' ' +
          months[now.getMonth()] +
          ', ' + now.getFullYear();
}

alert(setCutoffTime()); // Cut-off for PST
alert(setCutoffTime(true)); // Cut-off for PDT

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM