2009-07-23 3 views
0

Я использую Date.wday, чтобы получить номер буднего дня, но как я могу создать новую дату с таким количеством (без использования Date.commercial)? Мне нужна дата только на следующей неделе. Например, если у меня есть 2 (вторник), новая дата будет любой даты следующего дня (2009-07-28). Благодаря!Как создать новую дату всего за день недели?

ответ

0

Я сомневаюсь, что вы можете сделать что-то подобное, как вы можете себе представить ...

создания нового объекта Date говорит неявно, создавая дату, а не будний день ...

почему бы не получить в этот день и добавить к нему неделю?

Создайте метод, который передает дату и день недели, а затем добавьте дни, пока не получите нужный вам рабочий день, и добавьте 1 неделю, чтобы получить следующую неделю, если вам нужно.

(извините, я C# развиваться, но я надеюсь, что вы получите то, что я говорю)

DateTime AddWeekFromDate(DateTime today, DayOfWeek week) 
{ 
    if(today.DayOfWeek == week) 
     return today.AddDays(7); 

    while (today.DayOfWeek != week) 
     today = today.AddDays(1); 

    return today; 
} 

использованием

lbl.Text = AddWeekFromDate(DateTime.Now, DayOfWeek.Wednesday).ToLongDateString(); 

петь дату сегодня (23 июля 2009) его выходы

Wednesday July 29th, 2009 
+1

«почему бы не получить, что день и добавить к нему неделю? " Wow, duh. Спасибо. – Rick

+0

Если сегодня среда и я прохожу в среду для DayOfWeek, разве это не только сегодня, а не через неделю? –

+0

@Sarah больше не было :) – balexandre

-1

Я ничего не знаю о Java, но я много знаю на других языках. Если вы знаете, что всегда будет неделя, вы можете найти что-то, что всегда определяет, что такое понедельник на этой неделе, а затем, основываясь на этом, добавьте свой день недели и 7 к дате. Таким образом, в PHP, я бы с:

$monday = (date('w', time()) == 1) ? strtotime("Today") : strtotime("Monday"); 
// This will give us a date variable of this Monday. The conditional bit is to avoid getting last Monday when today is Monday. 

$day_number = $_POST['daynumb']; 
// Or however the day of the week number gets into the mix. 

$next_week = strtotime("+".$day_number + 7." days", $monday); 

Я знаю, что это не является совершенным с точки зрения синтаксиса и то, что вам нужно, но логически она должна работать таким же образом.

+0

Если вы проголосуете за что-то, вы должны оставить комментарий. – Anthony

+0

Я предполагаю, что это было отклонено, потому что ваш ответ использовал PHP, и все же вопрос отмечен как Ruby. Был ли этот тег добавлен позже? – user37011

+0

Я понятия не имею. Я обычно указываю в актуальном вопросе, если проблема связана с языком. Если я работаю в PHP, и это не проблема с PHP, я думаю, что полезно получить обратную связь с другими языками. Я всегда считал теги средством организации и улучшения поисков, а не частью самого вопроса.Не говоря уже о том, что я указал, что, хотя мой пример был на PHP, он работал бы на любом другом языке. Это всего лишь математика, основанная на дате. – Anthony

3

Вы можете превратить день номер (например 2) в имя день следующим образом:

day_number = 2 
Date::DAYNAMES[day_number] 
# => 'Tuesday' 

Если вы устанавливаете chronic драгоценный камень, то вы можете сделать хороший на естественном языке синтаксический даты и времени. Например:

Chronic.parse 'next tuesday' # it's currently Thursday, July 23 
# => Tue Jul 28 

Комбинируя их, вы можете сделать

require 'chronic' 

class MyClass 

    # returns a Date for the nth day of the week next week 
    def next_n_day(n) 
    Chronic.parse("next #{Date::DAYNAMES[n]}") 
    end 

end 
+0

Я приехал сюда, чтобы найти способ найти предыдущий день рынка (как правило, прошлый рабочий день раньше) с датой дивиденда. Итак, теперь я использую: 'Chronic.parse 'last weekday',: now => Time.parse (" 2010-07-09 ")' Хороший совет, спасибо! – Marcos

1

Найти дельту дней между следующий вторник и сегодня, а затем использовать Дата # +

today = Date.today 
future_wday = 2 
delta_days = future_wday + 7 - today.wday 
future_date = today + delta_days 
p future_date.ctime # => "Tue Jul 28 00:00:00 2009" 
+0

Это будет работать и даже проще ... если вы просто ищете 1 неделю с сегодняшнего дня, просто выполните: 'future_date = today + 7' –

Смежные вопросы