Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript指定日期之前最近的星期日_Javascript_Datetime - Fatal编程技术网

使用JavaScript指定日期之前最近的星期日

使用JavaScript指定日期之前最近的星期日,javascript,datetime,Javascript,Datetime,我需要知道php&javascript 让我们做一个活动上周日给我 give_me_last_Sunday('20110517') is 20110515 give_me_last_Sunday('20110604') is 20110529 完整备份在周日=每周完成。如果我想恢复每日备份,我需要完整(每周)和每日备份。在恢复到临时目录之前,我需要复制备份文件,因此我要恢复每日备份,我需要知道需要沿每日文件复制哪些每周备份文件 我的想法是得到给定日期的朱利安表示(或类似的东西),然后减去1,检

我需要知道php&javascript

让我们做一个活动上周日给我

give_me_last_Sunday('20110517') is 20110515
give_me_last_Sunday('20110604') is 20110529
完整备份在周日=每周完成。如果我想恢复每日备份,我需要完整(每周)和每日备份。在恢复到临时目录之前,我需要复制备份文件,因此我要恢复每日备份,我需要知道需要沿每日文件复制哪些每周备份文件


我的想法是得到给定日期的朱利安表示(或类似的东西),然后减去1,检查是否是星期天。。。不确定这是否是最好的方法,也不确定如何将给定的日期转换为可以减去的日期。

是的,strotime已经移植到JS中,例如这里。

好的,所以这只适用于JavaScript。您需要从中提取月份、日期和年份。以下只是如何获得日期的部分答案:

<script type="text/javascript">
var myDate=new Date();
myDate.setFullYear(2011,4,16)

var a = myDate.getDate();
var t = myDate.getDay();
var r = a - t;
document.write("The date last Sunday was "  + r);

</script>

var myDate=新日期();
myDate.setFullYear(2011,4,16)
var a=myDate.getDate();
var t=myDate.getDay();
var r=a-t;
文件。写入(“上周日的日期为”+r);
因此,setFullYear函数将myDate设置为指定的日期,其中前四位是年份,下一位是月份(0=一月,1=二月,…)。最后一个是实际日期。然后,上面的代码给出了在此之前的星期天的日期。我猜您可以添加更多代码来获取月份(使用getMonth()方法)。以下是一些可能有用的链接

(您可能会找到所需的其他功能)


我希望这会有所帮助,尽管这不是一个完整的答案。

基于Thomas的努力,如果输入字符串的格式与您指定的格式完全相同,那么:

function lastSunday(d) {
  var d = d.replace(/(^\d{4})(\d{2})(\d{2}$)/,'$1/$2/$3');
  d = new Date(d);
  d.setDate(d.getDate() - d.getDay());
  return d;
}
编辑 如果我现在就写,我不会依赖Date对象来解析字符串,而是自己来做:

function lastSunday(s) {
  var d = new Date(s.substring(0,4), s.substring(4,6) - 1, s.substring(6));
  d.setDate(d.getDate() - d.getDay());
  return d;
}
虽然我测试过的所有浏览器都能正确解析yyyy/mm/dd格式,但我认为坚持使用基本方法更可靠。特别是当它们可能更高效时。

最终代码(非常感谢@Thomas&@Rob)


“上周日”是指“给定日期当天或之前最近的周日”?或者“给定日期前最近的星期日”?@Jonathan:给定日期前最近的星期日。我提供了一些例子,所以非常清楚……你可能很清楚——我不清楚。由于2011年5月17日是星期二,2011年5月16日是星期一,因此不清楚样本数据是否满足该问题。类似地,2011-06-04是星期六(2011-05-29是星期日),因此当给定日期是星期日时,您的示例数据不会显示您需要的内容。您是对的。感谢您指出。。。。fixed@Thomas,我在哪里指定给定的日期?@Radek:对不起,我误解了你的问题。您希望在日期表单中输入。让我想想…@Radek:我现在明白了。您仍然需要计算特定日期对应的日期(星期一)。我们如何做到这一点…嗯,我正在测试你的代码,从今天开始,它给我上周日的时间。所以我想我可以修改一下你的代码。但是我一点也不懂代码:-)@Radek:是的,我的代码不是你真正想要的。但它确实是“其中的一部分”。我想你只是使用getDay方法。罗布:行!你能给我解释一下这个函数吗?特别是最后一部分。我不明白它为什么会在上个星期天告诉我:-)第一部分使用正则表达式将20110504转换为2011/05/04,这是一种ISO8601格式,javascript日期对象可以默认解析该格式。使用
newdate()
将该字符串转换为日期对象。setDate(int)设置日期对象的日期,int可以为负数,以便将日期设置在当前月份之前。getDate()返回当前日期,getDay()返回一周中的当前天数,星期天为零。因此,从日期中减去天数总是得到星期天。如果日期为负数,date对象会将其调整到上一个月。知道为什么
d.getMonth()
返回
4
,而
d
返回
May
for
20110516
,因为getMonth()从0返回值吗-11@RobG,很好的解释,很好的解决方案。Javascript中的日期函数非常令人沮丧和困惑,UTC、getDate、setDate、getDay。。。所有的术语都太相似了,做了相似的事情。你有没有推荐一个简洁的摘要?你似乎直觉地理解了这些东西。
function lastSunday(d) {
  var d = d.replace(/(^\d{4})(\d{2})(\d{2}$)/,'$1/$2/$3');

  d = new Date(d);
  d.setDate(d.getDate() - d.getDay());

  year = d.getFullYear()+'';
  month = d.getMonth()+1+'';
  day = d.getDate()+'';
  if ( month.length == 1 ) month = "0" + month; // Add leading zeros to month and date if required
  if ( day.length == 1 ) day = "0" + day;  

  return year+month+day;
}